• XSS.stack #1 – первый литературный журнал от юзеров форума

Как уменьшить размер исполняемого файла ?

ymmfty0

HDD-drive
Пользователь
Регистрация
28.10.2022
Сообщения
29
Реакции
5
Приветствую всех! Кто может мне помочь?

При использование параметра в C/C++ -> Создание Кода -> Библиотека выполнения-> /MT
Предварительно использую эти параметры:
Компоновщик -> Файл манифеста -> Создавать манифест -> Нет(/MANIFEST:NO)
C/C++ -> Оптимизация -> Максимальная оптимизация (приоритет размера) (/O1)
C/C++ -> Оптимизация -> Предпочитать размер или скорость -> Предпочитать краткость кода (/Os)
Вот такой код

C++:
#include <Windows.h>

int main()
{
    return 0;
}

При билде в Release/x64 файл занимает 108кб. Я хочу так же использовать CRT и STL , но при этом хочется уменьшить размер файла . Буду благодарен за советы ,что можно будет сделать, всем спасибо. Дополнительно: Я знаю про upx, я ищу еще альтернативные способы. Мне нужен /MT , я хочу чтобы код был переносимым. Я не хочу отключать CRT и STL, мне это надо, я работаю с этим .
 
Я хочу так же использовать CRT и STL , но при этом хочется уменьшить размер файла
Я не хочу отключать CRT и STL, мне это надо, я работаю с этим .
Никак. 108 кило не так уж и много для Ваших хотелок.
 
Никак. 108 кило не так уж и много для Ваших хотелок.
с чего вдруг то? 20 кб с кастомным crt от старой студии будет +- тоже самое

ps бинарник тык
 
Последнее редактирование:
с чего вдруг то? 20 кб с кастомным crt от старой студии будет +- тоже самое

ps бинарник тык
Человек способный собрать кастомную CRT обычно в CRT не нуждается.

Тут скорее всего дело не в основном коде, а в зависимостях, которые по уши завязаны на CRT. Напишу, как я избавлялся от них в таких случаях:
- Проект собирался с флагом /MD, для того, чтобы CRT не была включена в бинарник, а импортировалась из msvcrt*.dll.
- Импорт полученного бинарника изучался, некоторые функции писались на коленке, некоторые удавалось найти в ntdll.dll, да да, эта библиотека содержит базовый сишный рантайм.
- Писалась отдельная *.lib с теми CRT функциями, которые нужны проекту.
- Сборка основного проекта с полученной либой с флагом /MT -> профит. Базовой CRT нету, все работает, бинарник имеет минимальный размер.

Это и есть по сути написание своей CRT.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
waahoo расскажи пожалуйста, зачем все стремятся делать такие маленькие по объему файлы?
мы же вроде не во времена ADSL живем. Не понимаю до сих пор =)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
waahoo расскажи пожалуйста, зачем все стремятся делать такие маленькие по объему файлы?
мы же вроде не во времена ADSL живем. Не понимаю до сих пор =)
а ты криптани файл 30 метров
 
Пожалуйста, обратите внимание, что пользователь заблокирован
а ты криптани файл 30 метров
Такой файл написать сложно =)
Надо прям очень постараться :)
 
waahoo расскажи пожалуйста, зачем все стремятся делать такие маленькие по объему файлы?
мы же вроде не во времена ADSL живем. Не понимаю до сих пор =)
Это круто, это тешит самолюбие кодера, чем меньший по объему код удается собрать без потери функционала тем лучше. Это возвышает кодера над коллегами которые собирают жир по 10+мб в объеме на каких нибудь голангах или питонах и не знают как можно сделать по другому. Понимание сути позволяет писать шеллкод и эксплойты, а это совсем другой уровень мастерства. С практической точки зрения думаю разницы не много в наше время.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
20 кб
Нет, это всё весело, конечно, но ты никак не уложишь в 20кб то, что необходимо для использования STL в полной мере. Обработку исключений и отматывание стека уже реализовал в своей CRT, например? Понятно, что CRT от студии жирный, но если ты включил LTO, то это практически минимум того, что ты можешь получить без потери функционала. Например, функции форматирования строк из msvcrt.dll не умеют работать с рядом типов данных, хотя очень много библиотек рассчитывает на то, что это же стандарт, должно работать. Никто же не думает, что ты его библиотеку будешь без CRT собирать и пытаться к этому какую-то чушь типа msvcrt.dll прикрутить.
 
Нет, это всё весело, конечно, но ты никак не уложишь в 20кб то, что необходимо для использования STL в полной мере. Обработку исключений и отматывание стека уже реализовал в своей CRT, например? Понятно, что CRT от студии жирный, но если ты включил LTO, то это практически минимум того, что ты можешь получить без потери функционала. Например, функции форматирования строк из msvcrt.dll не умеют работать с рядом типов данных, хотя очень много библиотек рассчитывает на то, что это же стандарт, должно работать. Никто же не думает, что ты его библиотеку будешь без CRT собирать и пытаться к этому какую-то чушь типа msvcrt.dll прикрутить.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
After using the VC-LTL, the binaries will be dynamically linked to the built-in msvcrt.dll or ucrtbase.dll in the Windows to reduce the binaries size
Например, функции форматирования строк из msvcrt.dll не умеют работать с рядом типов данных, хотя очень много библиотек рассчитывает на то, что это же стандарт, должно работать. Никто же не думает, что ты его библиотеку будешь без CRT собирать и пытаться к этому какую-то чушь типа msvcrt.dll прикрутить
Чтобы точнее сказать, msvcrt.dll - это типа стандарт c89, когда ты пытаешься собрать какую-то стороннюю библиотеку, которая этого не предполагает, то готовься получить ряд неочевидных багов. Если ты пытаешься собрать библиотеку, которая умеет в с89, то линкуя с msvcrt.dll, нужно об этом библиотеке сказать какими-то дефайнами, которые она переварит. Если ты используешь какую-то прослойку над msvcrt.dll, которая якобы тебе обеспечит какой-то более современный стандарт, ну окей, вопрос лишь в том, всё ли там в достаточной степени допилено. Как бы я не говорю её не использовать, но как в Цэ/Плюсах рисковать неочевидными багами ради уменьшения размера даже в сотню килобайт - не стоит того.
 
Последнее редактирование:
waahoo расскажи пожалуйста, зачем все стремятся делать такие маленькие по объему файлы?
мы же вроде не во времена ADSL живем. Не понимаю до сих пор =)
Объясняю на пальцах. Есть такой показатель у файла, называется энтропия*. Когда криптуется большой файл, то у выходного файла (тобишь самого крипта) энтропия будет выше, следовательно подозрительность у файла в глазах АВ больше. Такой файл труднее закриптовать


*Гугл: Энтропия файла измеряет случайность данных в файле и используется для определения того, содержит ли файл скрытые данные или подозрительные сценарии. Шкала случайности — от 0 (не случайно) до 8 (полностью случайно, например, зашифрованный файл).

И еще, по поводу файла в 30 метров, обычно когда компилят питон в екзе примерно такой размер и получается
 
Пожалуйста, обратите внимание, что пользователь заблокирован
следовательно подозрительность у файла в глазах АВ больше
Ну у файла с редкой кастомной CRT (или с отсутствием CRT в принципе) подозрительность больше. Как бы даже если он проще и лучше криптуется всегда можно натолкнуться на скан памяти, который его спалит. Тут опять же вопрос в каждой конкретной ситуации, а не в общем решении.
 
Тут опять же вопрос в каждой конкретной ситуации, а не в общем решении.
Ага, ну я человеку ответил исключительно в рамках самого вопроса, а не темы в целом. Что касается CRT, если STL-ные классы не использовать, то вес получается вполне приемлемый и проблем с криптом не возникает. Тут каждый дрочит как хочет, лично я пишу с /MT, потому что без CRT часто возникают аномалии, становится проблематично использовать библиотеки ну и прочие подводные камни, которые мы все и так знаем. Жертвовать своим временем и удобством/скоростью разработки в угоду весу я не готов. Классы из STL которые мне нужны я реализовал сам.Вес получается нормальный(даже с учетом того, что я морфлю код) и проблем с криптом не возникает.
 
Чтобы точнее сказать, msvcrt.dll - это типа стандарт c89, когда ты пытаешься собрать какую-то стороннюю библиотеку, которая этого не предполагает, то готовься получить ряд неочевидных багов. Если ты пытаешься собрать библиотеку, которая умеет в с89, то линкуя с msvcrt.dll, нужно об этом библиотеке сказать какими-то дефайнами, которые она переварит. Если ты используешь какую-то прослойку над msvcrt.dll, которая якобы тебе обеспечит какой-то более современный стандарт, ну окей, вопрос лишь в том, всё ли там в достаточной степени допилено. Как бы я не говорю её не использовать, но как в Цэ/Плюсах рисковать неочевидными багами ради уменьшения размера даже в сотню килобайт - не стоит того.
у человека был вопрос уменьшить вес , ему сказали как , выкатывай вариант если с моим не согласен в чём проблема то
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх