Este documento técnico detalla los métodos avanzados para reducir el tamaño de los ejecutables en formato ELF (Executable and Linkable Format) en sistemas operativos Linux, específicamente bajo la arquitectura Intel x86. El objetivo principal es eliminar el exceso de bytes y la sobrecarga innecesaria que introducen las herramientas de compilación estándar, como GCC, al generar binarios.
El proceso comienza con un programa C trivial que devuelve un código de salida específico. Aunque las opciones de optimización básicas de GCC reducen ligeramente el tamaño del archivo, el texto explica que para lograr una minimización significativa es necesario abandonar el lenguaje de alto nivel y trabajar directamente con ensamblador, utilizando el ensamblador NASM. La reducción crítica se logra al omitir los archivos de inicio estándar del sistema mediante la opción -nostartfiles, lo que permite definir un punto de entrada personalizado (_start) en lugar de depender de la función main() y las rutinas de inicialización de la biblioteca C.
Sin embargo, esta aproximación requiere manejar manualmente la limpieza del proceso. El tutorial explica que no se debe usar la función exit() de la biblioteca estándar, ya que intenta ejecutar tareas de finalización que nunca fueron iniciadas. En su lugar, el código ensamblador debe invocar directamente la llamada al sistema _exit(). La optimización definitiva se alcanza utilizando la opción -nostdlib para eliminar por completo las dependencias de librerías externas. En esta etapa final, el programa no enlaza con ninguna biblioteca; en cambio, utiliza la instrucción int 0x80 para realizar una llamada al sistema directa al kernel de Linux, especificando el número de llamada de salida (1) y el valor de retorno en los registros adecuados. Este enfoque produce un ejecutable funcional de apenas unos cientos de bytes, ilustrando las mecánicas internas del formato ELF y la interfaz de llamadas al sistema de Linux.
