Mala količina RAM-a i uređaji za dugotrajnu pohranu na osobnim računalima u prošlosti su nametali vrlo stroga ograničenja veličine programa. Taj problem danas ne postoji. Međutim, čak je i sada ponekad važno smanjiti veličinu exe-modula razvijene aplikacije što je više moguće.
Potrebno
- - izvor;
- - sastavljač, povezivač;
- - kompresori PE modula, kao što su UPX, Themida.
Upute
Korak 1
Izgradite izdanu verziju aplikacije koja se može izvršiti. Odaberite odgovarajuću konfiguraciju u postavkama projekta u IDE-u. Ako takve konfiguracije nema, stvorite je na temelju postojeće. Izmijenite popis opcija povezivanja uklanjanjem i dodavanjem odgovarajućih direktiva. Dakle, kada koristite Microsoftov razvojni paket, trebali biste ukloniti opciju / debug. Izvornom kodu možete dodati i sljedeću direktivu: #pragma comment (linker, "/ RELEASE")
Korak 2
Konfigurirajte projekt kako biste izbjegli što je moguće povezivanje izvršne datoteke sa statičkim knjižnicama. Koristite zajedničke verzije odgovarajućih knjižnica. Na primjer, možete izuzeti kôd runtime knjižnica C i C ++ zamjenom opcije povezivanja / ML ili / MT (statičke knjižnice s jednim ili više niti) s / MD (CRT DLL s više niti).
3. korak
Razmislite o spajanju različitih odjeljaka exe modula u jedan. Ova metoda neće dati primjetan rezultat ako je datoteka dovoljno velika, ali s početnom veličinom modula od 20-30 kilobajta, dobitak može biti značajan. Opcija povezivanja / spajanje omogućuje spajanje odjeljaka. Možete ga postaviti kroz parametre projekta: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data ili pomoću pragma direktiva u izvornom kodu: #pragma comment (linker, "/ spajanje:.text =.data ") # pragma komentar (linker," /merge:.reloc=.data")#pragma comment (linker, "/merge:.rdata=.data")#pragma comment (linker," / merge:.idata =.data ") Također ima smisla definirati atribute rezultirajućeg odjeljka: #pragma comment (linker," /section:.data, rwe ")
4. korak
Smanjite veličinu exe postavljanjem minimalne vrijednosti veličine blokova duž granica kojih su odjeljci poravnati. Upotrijebite opciju / filealign linker navedenu uređivanjem svojstava projekta ili pragma direktive: #pragma comment (linker, "/ filealign: 0x200") Ova je metoda prikladna za male module.
Korak 5
Pokušajte smanjiti veličinu exe datoteke gradeći je s opcijama optimizacije kako biste smanjili količinu strojnog koda. Zamijenite opcije kompajlera / O2 ili / Od s / O1.
Korak 6
Zamijenite standardni DOS stub u exe-modulu svojim, koji će imati minimalnu veličinu. Upotrijebite opciju / stub linker: #pragma comment (linker, "/stub:mystub.exe")Ovdje mystub.exe je ime DOS izvršne datoteke koja će biti dodana u exe modul kao klat.
7. korak
Razmislite o određivanju vlastite ulazne točke u aplikaciju. To će eliminirati inicijalizacijski kod statičnih runtime knjižnica. Koristite opciju / entry linker, na primjer: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Korak 8
Primijenite uslužne programe za pakiranje poput UPX, ASPack, Themida, PECompact na gotovu exe datoteku. Podaci modula bit će komprimirani. Otpakirat će se u memoriju nakon pokretanja aplikacije. Ova metoda daje dobre rezultate za velike exe datoteke koje sadrže veliku količinu statičkih podataka s niskom entropijom (na primjer, DIB rasteri u odjeljku resursa).