Logo

PE Tool

Если вы пишете на Delphi и задумывались над уменьшением размеров исполнимого файла, но не хотите использовать сжатие, то наверняка знаете про программы вроде StripReloc, умеющие вырезать перемещаемые символы из exe-файлов. Однако после этого в файлах может оставаться другая избыточная информация, избавиться от которой можно только пересборкой файла.
        /\_/\
    .__/ o o \    PE Tool 0.6 revision 767
   /~__;==t==/    Copyright © 2013-2017 Vladislav Javadov
  (_____)_m_m)

       Loading  tregsvr.exe             983703 bytes  100.0%
    Image data                          985088 bytes  100.1%
Replacing stub  C:\Tools\Pet.exe          -960 bytes  -93.8%
     Stripping                         -911750 bytes  -92.6%
        Saving  tregsvr.exe              73338 bytes    7.5%
         Total                         -910365 bytes  -92.5%

Download Cantor Systems

PE Tool — утилита пересборки файлов

PE Tool — утилита оптимизации PE-файлов путем их пересборки, без сжатия. Реализованы следующие оптимизации:
  • Уменьшение заголовков PE за счет сокращения неиспользуемых записей каталога данных (data directory).
  • Вырезание отладочной информации, прикрепленных данных, пустых секций и секций без ссылок на них (ключ -deep).
  • Вырезание перемещаемых символов (relocations) и секции экспорта из exe-файлов.
  • Удаление секций, заданых ключом -dropsect.
  • Замена DOS-заглушки (stub) любой программой DOS или вытащенной на лету заглушкой другого PE-файла. Сама PE Tool имеет заглушку размером 60 байт, которую можно использовать по умолчанию.
  • Обрезка секций по фактическим данным, с вырезанием повторяющиейся строки PADDINGXXPADDING, добавляемой системной функцией UpdateResource при внедрении манифеста.
  • Выравнивание секций на минимально возможное значение — 512 байт.
  • Обрезка файла по границе фактических данных при сохранении — ключ -trunc.
Дополнительные возможности:
  • Установка требуемой версии ОС — ключ -osver.
  • Установка флага LARGE_ADDRESS_AWARE — ключ -3gb.
  • Установка флага динамической базы образа (ALSR) — ключ -aslr.
  • Установка флага совместимости с DEP (NX-битом) — ключ -nx.

Вызов программы

pet -strip -trunc -stub . MyFile.exe -into MyFile-stripped.exe
В процессе обработки выводится подробная статистика:
       Loading  tregsvr.exe             983703 bytes  100.0%
    Image data                          985088 bytes  100.1%
Replacing stub  C:\Tools\Pet.exe          -960 bytes  -93.8%
     Stripping                         -911750 bytes  -92.6%
        Saving  tregsvr.exe              73338 bytes    7.5%
         Total                         -910365 bytes  -92.5%

Оптимизация программ на этапе сборки

В современных версиях Delphi есть возможность оптимизировать программы еще на этапе сборки, тогда обработка при помощи PE Tool не понадобится. Ключ {$SetPEFlags} присутствовал в Delphi еще при Borland, но никакого влияния на сборку программ не оказывал. В Embarcadero Delphi эта оплошность была исправлена, и теперь компоновщик строит программы с учетом заданных флагов. В какой конкретно версии Delphi ключ {$SetPEFlags} стал приниматься во внимание, мне пока неизвестно. Можете подсказать в комментариях, если знаете.
{$IFNDEF DEBUG}
  {$WEAKLINKRTTI ON}
  {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
{$ENDIF}

uses
  Windows;

{$IFNDEF DEBUG}
  {$SetPEFlags
    IMAGE_FILE_RELOCS_STRIPPED or
    IMAGE_FILE_DEBUG_STRIPPED or
    IMAGE_FILE_LINE_NUMS_STRIPPED or
    IMAGE_FILE_LOCAL_SYMS_STRIPPED}
{$ENDIF}
Из собранной с такими установками программы PE Tool ничего не выжмет, максимум несколько сот байт с ключом -trunc. С появлением расширенной RTTI Embarcadero Delphi создает больше секций в exe-файле, увеличившийся из-за этого заголовок PE уже не влезает в первые 512 байт, поэтому замена DOS-заглушки не дает выигрыша в размере, — он съедается выравниванием. Секции PE обязательно должны быть выровнены на 512 байт.

Статьи в блоге

См. также

Комментариев нет :

Отправить комментарий

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.