Уменьшаем Exe, удаляя релоки без сторонних утилит.
Написал Snowy
08.05.2007
Многие знают, что можно уменьшить размер exe файла, не используя упаковщики и не изменяя функциональность, путём удаления из exe таблицы релокаций.
Обычно для этого используют сторонние утилиты. Например StripReloc Джордона Рассела.
А теперь я расскажу страшную тайну. В Delphi 2006 и выше, релоки можно не удалять, а просто не создавать!
В Delphi 2006 появилась недокументированная директива компилятора {$SETPEFLAGS}. Она позволяет настроить несколько тонких моментов создания нашего бинарника.
В первую очередь она интересна тем, что позволяет отключить создание таблицы релокаций.
Внимание! Не отключайте таблицы релокаций в dll, bpl и др. файлах.
Таблица релокации не нужна exe файлу, т.к. он всегда грузится по одному и тому же адресу.
Использование директивы {$SETPEFLAGS} очень простое:
Откройте файл проекта (dpr)
В uses добавьте Windows
Ниже пропишите {$SETPEFLAGS IMAGE_FILE_RELOCS_STRIPPED}
Попробуйте скомпилировать файл до добавления этой директивы и после.
Вы сами сможете убедиться, что размер exe уменьшился.
В дополнение хочу сказать, что использование SETPEFLAGS этим не ограничивается.
У неё есть ещё масса интересных возможностей. Получить их полный список очень просто:
Откройте модуль Windows
Найдите в нём поиском IMAGE_FILE_RELOCS_STRIPPED
Нашли? Ниже идёт целый список констант, начинающихся с IMAGE_FILE_
Справа идёт комментарий. Для включения нескольких инструкций, используйте or. Пример:
{$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or
IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}
Что я здесь сделал?
IMAGE_FILE_RELOCS_STRIPPED - отрезал релоки
IMAGE_FILE_DEBUG_STRIPPED - Выбросил из ехе Debug информацию
IMAGE_FILE_LINE_NUMS_STRIPPED - Выбросил из exe информацию о номерах строк
IMAGE_FILE_LOCAL_SYMS_STRIPPED - Выбросил local symbols
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP - При запуске exe с компакта, флэшки, других извлекаемых устройств, считать exe в свап и запустить оттуда. Полезно, если нужно запустить программу с компакта, а потом попросить вставить другой...
IMAGE_FILE_NET_RUN_FROM_SWAP - аналогично предыдущей, только для сетевых дисков
Для того что бы уменьшить размеры проги на Delphi до размеров в несколько килобайт необходимо писать на чистом WinApi удаляя RTL и пакуя FSG)) При этом я лично изготавливал ехе-шник (простое пустое окно как стандартный проект в делфи) размером в 1400 байт)))) Вот это уменьшение))
Может кому-то это покажется некорректным, но я использую программулину UPX. Прекрасно сжимает готовый exe-шник даже со стандартными настройками. Мне пока хватает.
При первоначальном размере в 4,22 Мб после конвертации получаем 1,50 Мб. Мелочь, а приятно. При это ессно функциональность приложения полностью сохраняется.
Ну UPX не единственный компрессор. Их много. Вот только сжимать или нет - вопрос спорный. Тут же не все так просто - у сжатия есть и минусы.
Для передачи можно и раром пожать. Или тем же 7z - с его оптимизаторами результат получше UPX'a будет.
Тут речь про выбрасывание ненужного мусора. А чем жать - раром или upx'ом - вопрос вторичный.
Ну и чушь... Уж лучше использовать халявные компоненты KOL+MCK. И при этом не лишаться визуального программирования и на выходе получать очень маленькие программы.
Ну и чушь... Уж лучше использовать халявные компоненты KOL+MCK. И при этом не лишаться визуального программирования и на выходе получать очень маленькие программы.
А кто мешает тебе удалять релоки из программы, написанной на KOL? Этот спозоб работает и в консольных приложениях и вообще для голого WinAPI.
на делфи 7 есть такой параметр (галочка а настройках) создавать пакеты запуска
так можно убрать эту галочку и ваш ехе будет весить всего 15 кб
конечно я пока не знаю какие проблемы потом могут быть с вашим ехе
но если вы решили писать трояна то это подойдет
на делфи 7 есть такой параметр (галочка а настройках) создавать пакеты запуска
так можно убрать эту галочку и ваш ехе будет весить всего 15 кб
конечно я пока не знаю какие проблемы потом могут быть с вашим ехе
но если вы решили писать трояна то это подойдет
проблема с трояном может быть одна - он не запуститься если на компе не будет установлена делфа - при отключении той галочки ехе-шник берет нужные ему файлы из системных папок