Mala količina RAM-a i uređaji za dugotrajno skladištenje podataka na ličnim računarima u prošlosti su nametali vrlo stroga ograničenja veličine programa. Ovaj 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;
- - kompajler, povezivač;
- - kompresori PE modula, kao što su UPX, Themida.
Instrukcije
Korak 1
Izgradite izdanu verziju aplikacije koja se može izvršiti. Odaberite odgovarajuću konfiguraciju u postavkama projekta u IDE-u. Ako ne postoji takva konfiguracija, kreirajte je na osnovu postojeće. Izmijenite listu 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 da biste izbjegli što je moguće povezivanje izvršne datoteke sa statičkim bibliotekama. Koristite zajedničke verzije odgovarajućih biblioteka. Na primjer, možete izuzeti kôd runtime knjižnica C i C ++ zamjenom opcije povezivanja / ML ili / MT (statičke biblioteke s jednim ili više niti) s / MD (CRT DLL s više niti).
Korak 3
Razmislite o spajanju različitih odjeljaka exe modula u jedan. Ova metoda neće dati primjetni 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ćava 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đe ima smisla definirati atribute rezultirajućeg odjeljka: #pragma comment (linker," /section:.data, rwe ")
Korak 4
Smanjite veličinu exe postavljanjem minimalne vrijednosti veličine blokova duž granica čiji su odjeljci poravnati. Koristite / filealign linker opciju navedenu uređivanjem svojstava projekta ili pragma direktive: #pragma comment (linker, "/ filealign: 0x200") Ova metoda je pogodna za male module.
Korak 5
Pokušajte smanjiti veličinu exe datoteke gradeći je s opcijama optimizacije kako biste smanjili količinu mašinskog koda. Zamijenite opcije kompajlera / O2 ili / Od sa / O1.
Korak 6
Zamenite 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 klica.
Korak 7
Razmislite o tome da odredite svoju tačku ulaza u aplikaciju. Ovo ć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 malom entropijom (na primjer, DIB rasteri u odjeljku resursa).