La pequeña cantidad de RAM y los dispositivos de almacenamiento a largo plazo en las computadoras personales en el pasado imponían restricciones muy estrictas sobre el tamaño de los programas. Este problema no existe hoy. Sin embargo, incluso ahora, a veces es importante minimizar el tamaño del módulo exe de la aplicación desarrollada tanto como sea posible.
Necesario
- - fuente;
- - compilador, enlazador;
- - compresores de módulos PE, como UPX, Themida.
Instrucciones
Paso 1
Cree la versión de lanzamiento del ejecutable de la aplicación. Seleccione la configuración adecuada en la configuración del proyecto en el IDE. Si no existe tal configuración, créala basándose en la existente. Modifique la lista de opciones del vinculador eliminando y agregando las directivas adecuadas. Por lo tanto, cuando utilice un paquete de desarrollo de Microsoft, debe eliminar la opción / debug. También puede agregar la siguiente directiva al código fuente: #pragma comment (linker, "/ RELEASE")
Paso 2
Configure el proyecto para evitar vincular el ejecutable con bibliotecas estáticas tanto como sea posible. Utilice versiones compartidas de las respectivas bibliotecas. Por ejemplo, puede excluir el código de las bibliotecas en tiempo de ejecución de C y C ++ reemplazando la opción del vinculador / ML o / MT (bibliotecas estáticas de uno o varios subprocesos) por / MD (DLL CRT de varios subprocesos).
Paso 3
Considere fusionar diferentes secciones del módulo exe en una sola. Este método no dará un resultado notable si el archivo es lo suficientemente grande, pero con el tamaño del módulo inicial de 20-30 kilobytes, la ganancia puede ser significativa. La opción del enlazador / fusionar le permite fusionar secciones. Puede configurarlo a través de los parámetros del proyecto: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data o usando directivas pragma en el código fuente: #pragma comment (linker, "/ merge:.text =.data ") # pragma comentario (vinculador," /merge:.reloc=.data")#pragma comentario (vinculador, "/merge:.rdata=.data")#pragma comentario (vinculador," / merge:.idata =.data ") También tiene sentido definir los atributos de la sección resultante: #pragma comment (linker," /section:.data, rwe ")
Paso 4
Reduzca el tamaño del archivo ejecutable estableciendo el valor mínimo del tamaño de los bloques a lo largo de los límites de los cuales se alinean las secciones. Utilice la opción del enlazador / filealign especificada editando las propiedades del proyecto o la directiva pragma: #pragma comment (enlazador, "/ filealign: 0x200") Este método es adecuado para módulos pequeños.
Paso 5
Intente reducir el tamaño del archivo exe construyéndolo con opciones de optimización para reducir la cantidad de código de máquina. Reemplace las opciones del compilador / O2 o / Od por / O1.
Paso 6
Reemplace el stub estándar de DOS en el módulo exe por el suyo, que tendrá el tamaño mínimo. Utilice la opción / stub linker: #pragma comment (linker, "/stub:mystub.exe")Aquí mystub.exe es el nombre del archivo ejecutable de DOS que se agregará al módulo exe como un stub.
Paso 7
Considere especificar su propio punto de entrada a la aplicación. Esto eliminará el código de inicialización de las bibliotecas de tiempo de ejecución estáticas. Utilice la opción del vinculador / entry, por ejemplo: #pragma comment (vinculador, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Paso 8
Aplique utilidades de empaquetado como UPX, ASPack, Themida, PECompact al archivo exe terminado. Los datos del módulo se comprimirán. Se descomprimirán en la memoria después de iniciar la aplicación. Este método da buenos resultados para archivos exe grandes que contienen una gran cantidad de datos estáticos con baja entropía (por ejemplo, rásteres DIB en la sección de recursos).