La petita quantitat de memòria RAM i dispositius d'emmagatzematge a llarg termini en ordinadors personals en el passat imposava restriccions molt estrictes a la mida dels programes. Aquest problema no existeix avui en dia. No obstant això, fins i tot ara de vegades és important minimitzar al màxim la mida del mòdul exe de l'aplicació desenvolupada.
Necessari
- - font;
- - compilador, enllaçador;
- - compressors de mòduls PE, com ara UPX, Themida.
Instruccions
Pas 1
Creeu la versió de llançament de l'executable de l'aplicació. Seleccioneu la configuració adequada a la configuració del projecte a l'IDE. Si no hi ha cap configuració d’aquest tipus, creeu-la en funció de l’existent. Modifiqueu la llista d’opcions d’enllaçadors eliminant i afegint directrius adequades. Per tant, quan utilitzeu un paquet de desenvolupament de Microsoft, heu d’eliminar l’opció / debug. També podeu afegir la directiva següent al codi font: #pragma comment (linker, "/ RELEASE")
Pas 2
Configureu el projecte per evitar enllaçar l'executable amb biblioteques estàtiques tant com sigui possible. Utilitzeu versions compartides de les biblioteques respectives. Per exemple, podeu excloure el codi de les biblioteques en temps d'execució C i C ++ substituint l'opció d'enllaç / ML o / MT (biblioteques estàtiques de subprocessos i multi-threads) per / MD (DLL de CRT multi-threaded).
Pas 3
Penseu en la possibilitat de combinar diferents seccions del mòdul exe en una sola. Aquest mètode no donarà un resultat notable si el fitxer és prou gran, però amb la mida inicial del mòdul de 20-30 kilobytes, el guany pot ser significatiu. L'opció / fusion linker us permet combinar seccions. Podeu configurar-lo mitjançant els paràmetres del projecte: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data o mitjançant directives pragma al codi font: #pragma comment (linker, "/ merge:.text =.data ") # pragma comment (linker," /merge:.reloc=.data")#pragma comment (linker, "/merge:.rdata=.data")#pragma comment (linker," / merge:.idata =.data ") També té sentit definir els atributs de la secció resultant: #pragma comment (enllaçador," /section:.data, rwe ")
Pas 4
Reduïu la mida de l'exe establint el valor mínim de la mida dels blocs al llarg dels límits dels quals estan alineades les seccions. Utilitzeu l'opció / filealign linker especificada editant les propietats del projecte o la directiva pragma: #pragma comment (linker, "/ filealign: 0x200") Aquest mètode és adequat per a mòduls petits.
Pas 5
Proveu de reduir la mida del fitxer exe creant-lo amb opcions d'optimització per reduir la quantitat de codi de màquina. Substituïu les opcions del compilador / O2 o / Od per / O1.
Pas 6
Substituïu la memòria DOS estàndard al mòdul exe per la vostra, que tindrà la mida mínima. Utilitzeu l'opció / stub linker: #pragma comment (linker, "/stub:mystub.exe")Aquí mystub.exe és el nom del fitxer executable de DOS que s'afegirà al mòdul exe com a prova.
Pas 7
Penseu a especificar el vostre propi punt d’entrada a l’aplicació. Això eliminarà el codi d’inicialització de les biblioteques d’execució estàtiques. Utilitzeu l'opció / entry linker, per exemple: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Pas 8
Apliqueu utilitats d’embalatge com UPX, ASPack, Themida, PECompact al fitxer exe acabat. Les dades del mòdul es comprimiran. Es desembalaran a la memòria després de llançar l'aplicació. Aquest mètode dóna bons resultats per a fitxers exe grans que contenen una gran quantitat de dades estàtiques amb poca entropia (per exemple, ràsters DIB a la secció de recursos).