¿Qué es el formato de archivo ELF?
Los archivos con la extensión .elf almacenan datos binarios estructurados según el estándar Executable and Linkable Format - el formato predeterminado de objetos y ejecutables para Linux, la mayoría de los sistemas tipo Unix y muchas plataformas embebidas. El formato fue introducido con Unix System V Release 4 por Unix System Laboratories y posteriormente ratificado como una especificación portátil de Tool Interface Standard (TIS).
Los archivos ELF pueden almacenar los siguientes tipos de contenido:
- Archivos ejecutables para aplicaciones y herramientas, a menudo distribuidos como un archivo .bin
- Archivos de objeto compilados, que normalmente llevan la extensión
.o - Bibliotecas compartidas - archivos con la extensión .so
- Core dumps (instantáneas de memoria producidas tras el fallo de un proceso)
El formato se basa en una estructura binaria bien definida. Cada archivo .elf comienza con la secuencia mágica de 4 bytes 7F 45 4C 46 (0x7F seguido de las letras ASCII ELF) en el desplazamiento 0, seguida de campos de encabezado que identifican la arquitectura de destino, el tamaño de palabra (32 bits o 64 bits) y el orden de los bytes (little-endian o big-endian). Dos tablas opcionales - la tabla de encabezado de programa y la tabla de encabezado de sección - describen luego cómo deben cargarse los segmentos en tiempo de ejecución y cómo se organizan las secciones para el enlace.
Aunque el estándar ELF se desarrolló pensando en los sistemas Unix, fue adoptado rápidamente por otras plataformas, incluyendo consolas de videojuegos como la PlayStation 2 y Wii, Android y muchos entornos embebidos. El tipo MIME estándar es application/x-elf. El contenido de un archivo .elf no es legible por humanos; herramientas como readelf y objdump (ambas parte de GNU Binutils) pueden inspeccionar sus encabezados y desensamblar su código sin ejecutarlo.
Seguridad y protección
RIESGO: HIGHComo cualquier ejecutable, un ELF puede contener malware - las botnets de Linux/IoT (por ejemplo, las variantes de Mirai) se distribuyen como binarios ELF, y un ELF se ejecuta con sus privilegios una vez ejecutado. Solo ejecute archivos ELF de fuentes confiables; no haga «chmod +x» y ejecute descargas aleatorias. Inspeccione los ELF desconocidos de forma segura con readelf/objdump o escanéelos en VirusTotal antes de ejecutarlos. Los archivos .elf de homebrew de consola tienen un riesgo menor (se ejecutan dentro del sandbox de un emulador), pero aun así obténgalos de fuentes de homebrew de buena reputación.
Detalles del formato
en pocas palabrasProgramas que abren archivos ELF
Detalles técnicos
especificación profunda| Número mágico | `7F 45 4C 46` (0x7F seguido de ASCII `ELF`) en el desplazamiento de byte 0, presente en cada archivo ELF válido |
| Tipo MIME | `application/x-elf` |
| Variantes de tamaño de palabra | 32 bits (EI_CLASS = `01`) y 64 bits (EI_CLASS = `02`), codificados en el desplazamiento 4 del encabezado ELF |
| Campo de orden de bytes | EI_DATA en el desplazamiento 5: `01` = little-endian, `02` = big-endian; determinado por la arquitectura del hardware de destino |
| Tipos de archivo (e_type) | ET_EXEC (ejecutable), ET_REL (objeto reubicable), ET_DYN (objeto compartido o PIE), ET_CORE (volcado de memoria) |
| Arquitecturas de destino | x86, x86-64, ARM, AArch64, MIPS, RISC-V, PowerPC, SPARC y muchas otras, identificadas por el campo `e_machine` en el encabezado ELF |
| Identificador OS/ABI | El byte EI_OSABI en el desplazamiento 7 especifica la ABI de destino: 0 = System V, 3 = Linux, 9 = FreeBSD, 12 = Solaris |
| Diseño de la estructura | Encabezado ELF → tabla de encabezado de programa opcional (segmentos de carga en tiempo de ejecución) → datos → tabla de encabezado de sección opcional (secciones en tiempo de enlace) |
| Secciones con nombre clave | `.text` (código), `.data` (datos inicializados), `.bss` (datos inicializados a cero), `.rodata` (constantes), `.symtab` / `.dynsym` (símbolos), `.rel` / `.rela` (reubicaciones) |
| Enlace dinámico | Los objetos compartidos son resueltos en el momento de la carga por el enlazador de tiempo de ejecución (`ld.so`); la ruta del intérprete requerida se almacena en el encabezado de programa `PT_INTERP` |
| Información de depuración | Los datos de depuración DWARF se incrustan en las secciones ELF `.debug_*` y se pueden eliminar de los binarios de producción con el comando `strip` |
| Ejecutables independientes de la posición | Los binarios PIE son de tipo ET_DYN y admiten ASLR; el kernel de Linux aleatoriza su dirección de carga base en cada inicio |
| Herramientas principales de inspección | `readelf -a` (encabezados, símbolos, secciones) y `objdump -d` (desensamblado), ambos proporcionados por GNU Binutils |
| Lanzado | 1989 (Unix System V Release 4); adopted as the TIS/System V ABI standard |
| Estándar abierto | Sí · libre de regalías |
| Especificación | refspecs.linuxfoundation.org |
Conversiones de ELF
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos ELF.