Cantitatea mică de memorie RAM și dispozitivele de stocare pe termen lung de pe computerele personale a impus în trecut restricții foarte stricte asupra dimensiunii programelor. Această problemă nu există astăzi. Cu toate acestea, chiar și acum este uneori important să minimizați cât mai mult dimensiunea modulului exe al aplicației dezvoltate.
Necesar
- - sursă;
- - compilator, linker;
- - compresoare ale modulelor PE, precum UPX, Themida.
Instrucțiuni
Pasul 1
Construiți versiunea de lansare a aplicației executabile. Selectați configurația adecvată în setările proiectului din IDE. Dacă nu există o astfel de configurație, creați-o pe baza celei existente. Modificați lista opțiunilor linkerului eliminând și adăugând directive adecvate. Deci, atunci când utilizați un pachet de dezvoltare de la Microsoft, ar trebui să eliminați opțiunea / debug. De asemenea, puteți adăuga următoarea directivă la codul sursă: #pragma comment (linker, "/ RELEASE")
Pasul 2
Configurați proiectul pentru a evita pe cât posibil legarea executabilului cu bibliotecile statice. Utilizați versiuni partajate ale bibliotecilor respective. De exemplu, puteți exclude codul bibliotecilor de runtime C și C ++ prin înlocuirea opțiunii linker / ML sau / MT (biblioteci statice cu un singur fir și cu mai multe fire) cu / MD (DLT CRT cu mai multe fire).
Pasul 3
Luați în considerare îmbinarea diferitelor secțiuni ale modulului exe într-una singură. Această metodă nu va da un rezultat vizibil dacă fișierul este suficient de mare, dar cu dimensiunea inițială a modulului de 20-30 kilobyte, câștigul poate fi semnificativ. Opțiunea / merge linker vă permite să îmbinați secțiuni. Îl puteți seta prin intermediul parametrilor proiectului: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data sau folosind directive pragma în codul sursă: #pragma comment (linker, "/ merge:.text =.data ") # pragma comment (linker," /merge:.reloc=.data")#pragma comment (linker, "/merge:.rdata=.data")#pragma comment (linker," / merge:.idata =.data ") De asemenea, are sens să definim atributele secțiunii rezultate: #pragma comment (linker," /section:.data, rwe ")
Pasul 4
Reduceți dimensiunea exe setând valoarea minimă a dimensiunii blocurilor de-a lungul limitelor cărora secțiunile sunt aliniate. Utilizați opțiunea / filealign linker specificată prin editarea proprietăților proiectului sau a directivei pragma: #pragma comment (linker, "/ filealign: 0x200") Această metodă este potrivită pentru module mici.
Pasul 5
Încercați să reduceți dimensiunea fișierului exe construindu-l cu opțiuni de optimizare pentru a reduce cantitatea de cod mașină. Înlocuiți opțiunile compilatorului / O2 sau / Od cu / O1.
Pasul 6
Înlocuiți butonul DOS standard din modulul exe cu al dvs., care va avea dimensiunea minimă. Utilizați opțiunea / stub linker: #pragma comment (linker, "/stub:mystub.exe")Aici mystub.exe este numele fișierului executabil DOS care va fi adăugat la modulul exe ca stub.
Pasul 7
Luați în considerare specificarea propriului punct de intrare în aplicație. Aceasta va elimina codul de inițializare a bibliotecilor statice de rulare. Utilizați opțiunea / entry linker, de exemplu: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Pasul 8
Aplicați utilitare de ambalare precum UPX, ASPack, Themida, PECompact la fișierul exe terminat. Datele modulului vor fi comprimate. Acestea vor fi despachetate în memorie după lansarea aplicației. Această metodă oferă rezultate bune pentru fișierele exe mari care conțin o cantitate mare de date statice cu entropie redusă (de exemplu, rasterele DIB în secțiunea resurse).