Malé množství paměti RAM a zařízení pro dlouhodobé ukládání v osobních počítačích v minulosti ukládalo velmi přísná omezení velikosti programů. Tento problém dnes neexistuje. Avšak i nyní je někdy důležité co nejvíce minimalizovat velikost exe-modulu vyvíjené aplikace.
Nezbytné
- - zdroj;
- - překladač, linker;
- - kompresory PE modulů, jako jsou UPX, Themida.
Instrukce
Krok 1
Sestavte vydanou verzi spustitelného souboru aplikace. Vyberte příslušnou konfiguraci v nastavení projektu v IDE. Pokud taková konfigurace neexistuje, vytvořte ji na základě stávající. Upravte seznam možností linkeru odstraněním a přidáním příslušných směrnic. Pokud tedy používáte vývojový balíček od společnosti Microsoft, měli byste odebrat možnost / debug. Do zdrojového kódu můžete také přidat následující direktivu: #pragma comment (linker, "/ RELEASE")
Krok 2
Nakonfigurujte projekt, abyste co nejvíce zabránili propojení spustitelného souboru se statickými knihovnami. Používejte sdílené verze příslušných knihoven. Například můžete vyloučit kód běhových knihoven C a C ++ nahrazením možnosti linkeru / ML nebo / MT (statické jednovláknové a vícevláknové knihovny) za / MD (vícevláknový CRT DLL).
Krok 3
Zvažte sloučení různých sekcí modulu exe do jedné. Tato metoda neposkytne znatelný výsledek, pokud je soubor dostatečně velký, ale s počáteční velikostí modulu 20–30 kilobajtů může být zisk značný. Možnost / merge linker umožňuje sloučit sekce. Můžete jej nastavit pomocí parametrů projektu: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data nebo pomocí direktiv pragma ve zdrojovém kódu: #pragma comment (linker, "/ merge:.text =.data ") # pragma komentář (linker," /merge:.reloc=.data")#pragma komentář (linker, "/merge:.rdata=.data")#pragma komentář (linker," / merge:.idata =.data ") Také má smysl definovat atributy výsledné sekce: #pragma comment (linker," /section:.data, rwe ")
Krok 4
Zmenšete velikost exe nastavením minimální hodnoty velikosti bloků podél hranic, které jsou zarovnány. Použijte možnost / filealign linker zadanou úpravou vlastností projektu nebo direktivy pragma: #pragma comment (linker, "/ filealign: 0x200") Tato metoda je vhodná pro malé moduly.
Krok 5
Pokuste se zmenšit velikost souboru exe vytvořením souboru s možnostmi optimalizace, abyste snížili množství strojového kódu. Nahraďte možnosti kompilátoru / O2 nebo / Od za / O1.
Krok 6
Vyměňte standardní útržek systému DOS v modulu exe za svůj vlastní, který bude mít minimální velikost. Použijte volbu / stub linker: #pragma comment (linker, "/stub:mystub.exe") Zde mystub.exe je název spustitelného souboru DOS, který bude přidán do modulu exe jako útržek.
Krok 7
Zvažte zadání vlastního vstupního bodu do aplikace. Tím se eliminuje inicializační kód statických běhových knihoven. Použijte možnost / entry linker, například: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Krok 8
Aplikujte obalové nástroje jako UPX, ASPack, Themida, PECompact na hotový soubor exe. Data modulu budou komprimována. Po spuštění aplikace budou rozbaleny do paměti. Tato metoda poskytuje dobré výsledky pro velké soubory exe obsahující velké množství statických dat s nízkou entropií (například rastry DIB v sekci zdrojů).