Уменьшение размера файлов с помощью Resource Tools PDF Печать E-mail

Инструменты Resource Tools можно использовать для уменьшения размера PE файлов путем удаления неиспользуемых ресурсов, таблицы перемещений и отладочной информации. Обычно для уменьшения размеров файлов используют программы-упаковщики. Инструменты Resource Tools можно использовать перед сжатием файлов упаковщиком для дополнительного уменьшения размера PE файлов.

1. Удаление неиспользуемых ресурсов Delphi/С++Builder

Компилятор Delphi/С++Builder помещает в PE файлы DFM ресурсы не зависимо от того, используется ли соответствующий класс формы, фрейма или модуля данных. Для этого достаточно включить имя PAS модуля в раздел uses. В результате все ресурсы, указанные в директивах {$R } в подключенном модуле будут помещены компилятором в секцию ресурсов файла.

Утилита rt_delete из состава инструментов Resources Tools поддерживает поиск и удаление неиспользуемых DFM ресурсов. Для этого rt_delete необходимо запустить с опцией –u:

rt_delete <имя файла> -u

Уменьшение размера файла

Для поиска неиспользуемых DFM ресурсов rt_delete извлекает из PE файла информацию о реализованных классах и проверяет для каждого DFM ресурса наличие соответствующего класса. Если класс отсутствует, то ресурс считается неиспользуемым. Информация о классах отсутствует в библиотеках ресурсов. Утилита rt_delete распознает библиотеки ресурсов и не производит в них поиск неиспользуемых DFM ресурсов.

Возможна ситуация, когда класс формы, фрейма или модуля данных реализован, но в программе не используется. Ресурс, связанный с этим классом, можно удалить с помощью опции –r, указав раздел RT_RCDATA и имя ресурса:

rt_delete <имя файла> -r:RT_RCDATA,<имя_ресуроса>

Кроме DFM ресурсов компиляторы Delphi/С++Builder помещает в раздел RT_RCDATA ресурсы DVCLAL и PACKAGEINFO. Эти ресурсы используются только в пакетах BPL и могут быть удалены из исполняемых файлов и библиотек DLL. Удалить эти ресурсы можно с помощью опции –u или с помощью опции –r. При использовании опции –u rt_delete проверяет, не является PE файл пакетом BPL. При использовании опции –r эта проверка не выполняется.

Список неиспользуемых ресурсов Delphi/C++ Bulder можно вывести без удаления с помощью утилиты rt_check:

rt_check <имя файла> -u

2. Удаление различных ресурсов

При сборке PE файла в его секцию ресурсов могут быть помещены ресурсы, которые реально в приложении не используются. Часто это происходит при использовании библиотек и компонентов сторонних разработчиков.
Утилита rt_delete позволяет удалять любые ресурсы. Для удаления необходимо указать его тип, имя и язык с помощью директивы –r:

rt_delete <имя файла> -r:<тип_ресурса>,<имя_или_индекс_ресурса>,<Язык>

Если ресурс или тип ресурса не имеет имени, то необходимо указать его индекс с помощью символа решетки, например:

rt_delete <имя файла> -r:RT_BITMAP,#1

Язык можно не указывать. В этом случае код языка ресурса не проверяется и удаляются все языковые варианты ресурса.

Для стандартных типов ресурсов можно вместо индекса указывать псевдоним: RT_BITMAP, RT_RCDATA и т.п.

Для удаления всех ресурсов заданного типа в опции –r необходимо опустить имя ресурса. Например, удаление всех ресурсов RT_BITMAP:

rt_delete <имя файла> -r:RT_BITMAP

Если необходимо удалить все ресурсы с заданным именем, но разного типа, необходимо указать имя ресурса, опустив его тип:

rt_delete <имя файла> -r:,<имя_или_тип_ресурса>

Данные ресурсов иконок и курсоров Win32 хранятся в двух типах ресурсов: RT_ICON, RT_ICON_INFO и RT_CURSOR, RT_CURSOR_GROUP соответственно. Для удаления иконок используется опция –i:

rt_delete <имя файла> -i:< индекс_или_имя_иконки>

Для удаления курсоров используется опция –c:

rt_delete <имя файла> -c:<индекс_или_имя_курсора>

3. Удаление языковых ресурсов

Если файл содержит варианты ресурсы для нескольких языков, то ресурсы для неиспользуемых языков также можно удалить с помощью утилиты rt_delete. Для этого необходимо указать код языка, опустив тип и имя ресурса.

rt_delete <имя файла> -r:,,<язык>

Язык можно задать следующими способами:
• Название языка, например RUSSIAN
• Десятичный код языка, например 1033
• Шестнадцатеричный код языка, например 0x409
Список поддерживаемых языков можно получить с помощью утилиты rt_language:

rt_language –list

4. Удаление секции ресурсов

Утилита rt_delete удаляет секцию ресурсов автоматически, если в ней не остается ресурсов. Поэтому удалить секцию ресурсов можно, указав опцию –r без параметров, что приведет к удалению всех ресурсов, а затем секции ресурсов:

rt_delete <имя файла> -r

 

5. Удаление таблицы перемещений

Таблица перемещений используется для коррекции адресов в PE файле, если он загружается по адресу, отличающемуся от заданного в файле. Таблица перемещений не используется для обычных PE файлов. Она необходима в сборках .NET и файлах библиотек DLL.
Удалить таблицу перемещений можно с помощью опции –reloc:

rt_delete <имя файла> -reloc

6. Удаление отладочной информации

Отладочная информация, как правило, не используется в финальных версиях файлов. Утилита rt_delete поддерживает удаление отладочной информации Win32 и GDB с помощью опции –dbg:

rt_delete <имя файла> -dbg