Executable and Linkable Format
ELF | ||
---|---|---|
![]() Capa de un archivo ELF | ||
Desarrollador | ||
Unix System Laboratories | ||
Información general | ||
Extensión de archivo |
none, .axf, .bin, .o, .so, .elf, .prx, .puff, .ko, .mod | |
Número mágico |
0x7F 'E' 'L' 'F' | |
Tipo de formato | Binario, ejecutable, objeto, biblioteca compartida, volcado de memoria | |
Contenido por | Algunos formatos binarios ejecutables | |
Formato abierto | ? | |
En informática, el formato Extensible Linkable Format (ELF, anteriormente llamado Extensible Linking Format), es un formato de archivo estándar común para archivos ejecutables, código objeto, bibliotecas compartidas y volcados de núcleo. Publicado por primera vez en la especificación para la Interfaz binaria de aplicaciones (ABI) de la versión del sistema operativo Unix llamada System V Release 4 (SVR4), y más tarde en el Tool Interface Standard, fue rápidamente aceptado entre los diferentes proveedores de sistemas Unix. En 1999, fue elegido como el formato de archivo binario estándar para Unix y sistemas Unix-like en procesadores x86 por el proyecto 86open.
Por diseño, el formato ELF es flexible, extensible y multiplataforma. Por ejemplo, admite diferentes endianness y tamaños de dirección, por lo que no excluye ninguna unidad central de procesamiento (CPU) o arquitectura del conjunto de instrucciones. Esto ha permitido que sea adoptado por muchos sistemas operativos diferentes en muchas plataformas de hardware diferentes.
—Ejemplo hex dump de un encabezado de archivo ELF[1]
|
Estructura
Dentro del formato ELF podemos distinguir varias partes.[2]
En primer lugar la cabecera ELF, que contiene información general sobre el ejecutable. En él se indican las posiciones de las tablas de cabeceras de sección y cabeceras de programa.
Cada una de estas cabeceras indican dónde se encuentran los datos de cada una de las secciones. Las cabeceras de programa definen las regiones del ejecutable o bibliotecas que es necesario cargar para crear la imagen del proceso e iniciar su ejecución. Las cabeceras de sección contienen información importante para el enlazado y la relocalización.
Las secciones tienen nombres que suelen coincidir en todos los sistemas. Ejemplos de secciones son:
.data Contiene datos inicializados del programa.
.debug Contiene información para ayudar a la depuración.
.ctors Contiene punteros a constructores de C++.
.dtors Contiene punteros a destructores de C++.
.dynamic Contiene información relevante para el enlazado dinámico.
.dynsym Contiene la tabla de símbolos para el enlazado dinámico.
.fini Contiene código de finalización del programa.
.init Contiene código de inicialización del programa.
.shstrtab Contiene una tabla de strings con los nombres de las secciones.
.strtab Contiene una tabla de strings normalmente usada para nombrar los elementos de la tabla de símbolos.
.symtab Contiene una tabla de símbolos.
.text Contiene la parte ejecutable de un programa.
Herramientas
readelf
es un programa UNIX que muestra la información sobre un archivo ELF.
Está implementado bajo licencia GPL en las GNU Binary Utilities.
Véase también
- Anexo:Comparación de formatos de archivos ejecutables
- DWARF – un formato para depurar datos
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.