Главная
 
 
Главная
Новости
Статьи
Самоучитель по Delphi
Справочник
Поиск
Карта сайта
Контакты
Авторизация





Забыли пароль?
Вы не зарегистрированы. Регистрация

Новости
В России создают соцсеть для чиновников
В начале марта свою сеть "Соратники" запустила "Справедливая Россия".
Thu, 11 Mar 2010 19:01:34 +0300

Сервисом Twitter на Украине пользуется 35,5 тыс пользователей
По данным сервиса Поиск по блогам Яндекса, за полгода украинский Твиттер вырос в 2 раза.
Thu, 11 Mar 2010 15:32:03 +0300

Sony официально представила новый контроллер для PlayStation 3
Да и сама Sony рассчитывает в ближайший год выпустить два десятка игр, совместимых с Move, сообщает igromania.ru.Sony готовит несколько вариантов поставки нового контроллера.
Thu, 11 Mar 2010 09:28:37 +0300

Уменьшаем Exe, удаляя релоки без сторонних утилит Версия для печати Отправить на e-mail
Статьи - Статьи
Многие знают, что можно уменьшить размер 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 - аналогично предыдущей, только для сетевых дисков
 
< Пред.   След. >
work online