
Многие, конечно, знают, что без проблем уменьшить размер exe файла можно, вообще не используя никакие упаковщики и совсем функциональность не изменяя, путём удаления из таблицы exe самих только релокаций...
Обычно, с этой целью используют сторонние утилиты. Как вариант - StripReloc, авторства Джордона Рассела.
А теперь давайте раскроем небольшой секрет! В Дельфи 2006 и далее, релоки не удалять можно, а просто совсем не создавать!
Узнать как поднять сайт в яндексе недорого можно на ресурсе teamseo.ru!
В Дельфи 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 - идентично предыдущей, но предназначено исключительно для сетевых дисков.