Malé množstvo pamäte RAM a zariadení na dlhodobé ukladanie v osobných počítačoch v minulosti zaviedlo veľmi prísne obmedzenia veľkosti programov. Tento problém dnes neexistuje. Avšak aj teraz je niekedy dôležité čo najviac minimalizovať veľkosť exe-modulu vyvíjanej aplikácie.
Nevyhnutné
- - zdroj;
- - prekladač, linker;
- - kompresory PE modulov, ako napríklad UPX, Themida.
Inštrukcie
Krok 1
Vytvorte uvoľnenú verziu spustiteľného súboru aplikácie. Vyberte príslušnú konfiguráciu v nastaveniach projektu v IDE. Ak takáto konfigurácia neexistuje, vytvorte ju na základe existujúcej. Upravte zoznam možností linkera odstránením a pridaním vhodných smerníc. Ak teda používate vývojový balík od spoločnosti Microsoft, mali by ste odstrániť možnosť / debug. Do zdrojového kódu môžete pridať aj túto smernicu: #pragma comment (linker, "/ RELEASE")
Krok 2
Nakonfigurujte projekt tak, aby sa čo najviac zabránilo prepojeniu spustiteľného súboru so statickými knižnicami. Používajte zdieľané verzie príslušných knižníc. Môžete napríklad vylúčiť kód runtime knižníc C a C ++ nahradením možnosti linkera / ML alebo / MT (statické jednovláknové a viacvláknové knižnice) za / MD (viacvláknové CRT DLL).
Krok 3
Zvážte zlúčenie rôznych sekcií modulu exe do jednej. Táto metóda neposkytne viditeľný výsledok, ak je súbor dostatočne veľký, ale s počiatočnou veľkosťou modulu 20 - 30 kilobajtov môže byť zisk značný. Možnosť / merge linker vám umožňuje zlúčiť sekcie. Nastaviť ho môžete pomocou parametrov projektu: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data alebo pomocou direktív pragma v zdrojovom kóde: #pragma comment (linker, "/ merge:.text =.data ") # pragma komentár (linker," /merge:.reloc=.data")#pragma komentár (linker, "/merge:.rdata=.data")#pragma komentár (linker," / merge:.idata =.data ") Má tiež zmysel definovať atribúty výslednej časti: #pragma comment (linker," /section:.data, rwe ")
Krok 4
Zmenšite veľkosť súboru exe nastavením minimálnej hodnoty veľkosti blokov pozdĺž hraníc, ktoré sú zarovnané. Použite možnosť / filealign linker zadanú úpravou vlastností projektu alebo direktívy pragma: #pragma comment (linker, "/ filealign: 0x200") Táto metóda je vhodná pre malé moduly.
Krok 5
Pokúste sa zmenšiť veľkosť súboru exe vytvorením súboru s optimalizačnými možnosťami, aby sa znížilo množstvo strojového kódu. Nahraďte možnosti kompilátora / O2 alebo / Od za / O1.
Krok 6
Vymeňte štandardný nástavec DOS v exe-module za svoj vlastný, ktorý bude mať minimálnu veľkosť. Použite voľbu / stub linker: #pragma comment (linker, "/stub:mystub.exe"} mystub.exe je názov spustiteľného súboru DOS, ktorý bude pridaný do exe modulu ako útržok.
Krok 7
Zvážte zadanie vlastného vstupného bodu do aplikácie. To eliminuje inicializačný kód statických runtime knižníc. Použite možnosť / entry linker, napríklad: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Krok 8
Aplikujte obalové nástroje ako UPX, ASPack, Themida, PECompact na hotový súbor exe. Dáta modulu budú komprimované. Po spustení aplikácie sa rozbalia do pamäte. Táto metóda poskytuje dobré výsledky pre veľké súbory exe, ktoré obsahujú veľké množstvo statických údajov s nízkou entropiou (napríklad rastre DIB v sekcii zdrojov).