Як зменшити розмір exe

Малий обсяг оперативної пам`яті і пристроїв довгострокового збереження інформації на персональних комп`ютерах в минулому накладав досить жорсткі обмеження на розмір програм. Сьогодні подібної проблеми не існує. Однак і зараз іноді важливо максимально зменшити розмір exe-модуля розробляється.
Як зменшити розмір exe

Вам знадобиться

  • - вихідний код;
  • - компілятор, линкер;
  • - компресори PE-модулів, такі як UPX, Themida.

Інструкція

1
Зберіть release-версію виконуваного модуля програми. Виберіть в налаштуваннях проекту в IDE відповідну конфігурацію. Якщо такій конфігурації немає, створіть її на основі вже існуючої. Змініть список опцій линкера, прибравши і додавши відповідні директиви. Так, при використанні пакета розробки від Microsoft, слід прибрати опцію / debug. Можна також додати в вихідний код директиву: #pragma comment (linker,"/ RELEASE")
2
Налаштуйте проект так, щоб максимально уникнути лінковки виконуваного модуля зі статичними бібліотеками. Використовуйте колективні версії відповідних бібліотек. Наприклад, можна виключити код бібліотек часу виконання C і C ++, замінивши опцію линкера / ML або / MT (статичні одно- і багатопотокові бібліотеки) на / MD (багатопотокова CRT DLL).


3
Розгляньте варіант злиття різних секцій exe-модуля в одну. Даний метод не дасть помітного результату, якщо файл досить великий, але при вихідному обсязі модуля в 20-30 кілобайт, виграш може виявитися істотним. Опція / merge линкера дозволяє об`єднати секції. Можна задати її через параметри проекту: / merge: .text = .data /merge:.reloc=.data /merge:.rdata=.dataілі за допомогою pragma-директив у вихідному коді: #pragma comment (linker,"/merge:.text=.data") #pragma Comment (linker,"/merge:.reloc=.data") #pragma Comment (linker,"/merge:.rdata=.data") #pragma Comment (linker,"/merge:.idata=.data") Також можна буде визначити атрибути результуючої секції: #pragma comment (linker,"/section:.data,rwe")
4
зменшіть розмір exe шляхом установки мінімального значення величини блоків, по межах яких вирівнюються секції. Використовуйте опцію линкера / filealign, задану через редагування властивостей проекту або директиву pragma: #pragma comment (linker,"/ Filealign: 0x200") Даний спосіб придатний для маленьких модулів.
5
спробуйте зменшити розмір exe-файлу, виробляючи його збірку з параметрами оптимізації, спрямованої на скорочення обсягу машинного коду. Замініть опції компілятора / O2 або / Od на / O1.



6
Замініть стандартну заглушку DOS в exe-модулі на власну, яка буде мати мінімальний обсяг. Використовуйте опцію линкера / stub: #pragma comment (linker,"/stub:mystub.exe") Тут mystub.exe - ім`я виконуваного файлу DOS, код якого буде додано до exe-модуль в якості заглушки.
7
Розгляньте варіант вказівки власної точки входу в додаток. Це дозволить виключити не започатковано код статичних бібліотек часу виконання. Використовуйте опцію линкера / entry, наприклад: #pragma comment (linker,"/ Entry: MyStartup") Void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK) -}
8
Застосуйте утиліти упаковки, такі як UPX, ASPack, Themida, PECompact до готового exe-файлу. Дані модуля піддадуться компресії. Їх розпакування буде здійснюватися в пам`ять після запуску програми. Цей метод дає хороші результати щодо об`ємних exe-файлів, що містять в собі велику кількість статичних даних з низькою ентропією (наприклад, DIB-растри в секції ресурсів).


Увага, тільки СЬОГОДНІ!


Оцініть, будь ласка статтю
Всього голосів: 177
Увага, тільки СЬОГОДНІ!