Jul 27

Грамотно уменьшаем размер exe-файла

Многие, конечно, знают, что без проблем уменьшить размер exe файла можно, вообще не используя никакие упаковщики и совсем функциональность не изменяя, путём удаления из таблицы exe самих только релокаций...

Обычно, с этой целью используют сторонние утилиты. Как вариант - StripReloc, авторства Джордона Рассела.

А теперь давайте раскроем небольшой секрет! В Дельфи 2006 и далее, релоки не удалять можно, а просто совсем не создавать!

В Дельфи 2006 недокументированная появилась директива компилятора под названием {$SETPEFLAGS}. Она дает возможность довольно легко настроить парочку тонких нюансов процесса творения нашего бинарника.

Во-первых, она именно тем и интересна, что нам позволяет создание таблицы релокаций полностью отключить.

В большом море информации в Интернете ищете качественные авторские уроки Photoshop? Не тратьте свое время зря! Заходите на сайт megaobzor.com и пройдите курс грамотного Photoshopа!

Но внимание! От таблицы ни в коем случае не отключайте релокаций в 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 - идентично предыдущей, но предназначено исключительно для сетевых дисков.



Поделитесь вашими мыслями

Поддерживаемые теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>