En informática , el formato ejecutable y enlazable [ cita requerida ] ( ELF , anteriormente denominado Formato de enlace extensible ), 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 la aplicación (ABI) de la versión del sistema operativo Unix denominada System V Release 4 (SVR4), [2] y posteriormente en Tool Interface Standard, [1]fue rápidamente aceptado entre diferentes proveedores de sistemas Unix . En 1999, el proyecto 86open lo eligió como formato de archivo binario estándar para sistemas Unix y similares a Unix en procesadores x86 .
Extensión de nombre de archivo | ninguno, .axf , .bin , .elf , .o , .prx , .puff , .ko , .mod y .so |
---|---|
número mágico | 0x7F 'E' 'L' 'F' |
Desarrollado por | Laboratorios del sistema Unix [1] : 3 |
Tipo de formato | Binario , ejecutable , objeto , biblioteca compartida , volcado de memoria |
Contenedor para | Muchos formatos binarios ejecutables |
Por diseño, el formato ELF es flexible, extensible y multiplataforma . Por ejemplo, es compatible con diferentes endianness y tamaños de direcciones, por lo que no excluye ninguna unidad central de procesamiento (CPU) o arquitectura de conjunto de instrucciones en particular . Esto ha permitido que sea adoptado por muchos sistemas operativos diferentes en muchas plataformas de hardware diferentes .
Diseño de archivo
Cada archivo ELF se compone de un encabezado ELF, seguido de los datos del archivo. Los datos pueden incluir:
- Tabla de encabezado del programa, que describe cero o más segmentos de memoria
- Tabla de encabezado de sección, que describe cero o más secciones
- Datos referidos por entradas en la tabla de encabezado del programa o la tabla de encabezado de sección
Los segmentos contienen información necesaria para la ejecución del archivo en tiempo de ejecución, mientras que las secciones contienen datos importantes para vincular y reubicar. Cualquier byte en todo el archivo puede ser propiedad de una sección como máximo, y pueden aparecer bytes huérfanos que no son propiedad de ninguna sección.
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 |..>......H@.....|
Ejemplo de hexdump de encabezado de archivo ELF [3]
Encabezado de archivo
El encabezado ELF define si se deben utilizar direcciones de 32 bits o de 64 bits . El encabezado contiene tres campos que se ven afectados por esta configuración y compensan otros campos que los siguen. El encabezado ELF tiene 52 o 64 bytes de longitud para binarios de 32 y 64 bits, respectivamente.
Compensar | Tamaño (bytes) | Campo | Propósito | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32 bits | 64 bits | 32 bits | 64 bits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | e_ident [EI_MAG0] hasta e_ident [EI_MAG3] | 0x7F seguido de ELF ( 45 4c 46 ) en ASCII ; estos cuatro bytes constituyen el número mágico . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 1 | e_ident [EI_CLASS] | Este byte se establece en 1 o 2 para indicar formato de 32 o 64 bits, respectivamente. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x05 | 1 | e_ident [EI_DATA] | Este byte se establece en cualquiera de los dos 1 o 2 para significar pequeña o grande endianness , respectivamente. Esto afecta la interpretación de campos de varios bytes que comienzan con desplazamiento 0x10 . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x06 | 1 | e_ident [EI_VERSION] | Establezca en 1 para la versión original y actual de ELF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x07 | 1 | e_ident [EI_OSABI] | Identifica la ABI del sistema operativo de destino .
A menudo se establece en | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 1 | e_ident [EI_ABIVERSION] | Especifica además la versión ABI. Su interpretación depende del ABI objetivo. El kernel de Linux (después de al menos 2.6) no tiene una definición, [5] por lo que se ignora para los ejecutables vinculados estáticamente. En ese caso, el desplazamiento y el tamaño de EI_PAD son 8 .glibc 2.12+ en caso e_ident [EI_OSABI] == 3 trata este campo como la versión ABI del enlazador dinámico : [6] define una lista de características del enlazador dinámico, [7] trata e_ident [EI_ABIVERSION] como un nivel de característica solicitado por el objeto compartido (biblioteca ejecutable o dinámica) y se niega a cargarlo si se solicita una característica desconocida, es decir e_ident [EI_ABIVERSION] es mayor que la característica más grande conocida. [8] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x09 | 7 | e_ident [EI_PAD] | actualmente sin usar, debe llenarse con ceros. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 2 | e_type | Identifica el tipo de archivo de objeto.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x12 | 2 | e_machine | Especifica la arquitectura del conjunto de instrucciones de destino . Algunos ejemplos son:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 4 | e_version | Establezca en 1 para la versión original de ELF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 4 | 8 | e_entry | Esta es la dirección de memoria del punto de entrada desde donde comienza a ejecutarse el proceso. Este campo tiene una longitud de 32 o 64 bits, según el formato definido anteriormente. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x20 | 4 | 8 | e_phoff | Apunta al inicio de la tabla de encabezado del programa. Por lo general, sigue el encabezado del archivo inmediatamente, haciendo el desplazamiento 0x34 o 0x40 para los ejecutables ELF de 32 y 64 bits, respectivamente. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x28 | 4 | 8 | e_shoff | Apunta al inicio de la tabla de encabezado de sección. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x30 | 4 | e_flags | La interpretación de este campo depende de la arquitectura de destino. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x34 | 2 | e_ehsize | Contiene el tamaño de este encabezado, normalmente 64 bytes para el formato de 64 bits y 52 bytes para el formato de 32 bits. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2A | 0x36 | 2 | e_phentsize | Contiene el tamaño de una entrada de tabla de encabezado de programa. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x38 | 2 | e_phnum | Contiene el número de entradas en la tabla de encabezado del programa. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2E | 0x3A | 2 | e_shentsize | Contiene el tamaño de una entrada de tabla de encabezado de sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x30 | 0x3C | 2 | e_shnum | Contiene el número de entradas en la tabla de encabezado de sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x32 | 0x3E | 2 | e_shstrndx | Contiene el índice de la entrada de la tabla de encabezado de sección que contiene los nombres de las secciones. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x34 | 0x40 | Fin del encabezado ELF (tamaño) |
Encabezado del programa
La tabla de encabezado del programa le dice al sistema cómo crear una imagen de proceso. Se encuentra en el desplazamiento del archivo. e_phoff , y consta de entradas e_phnum , cada una con tamaño e_phentsize . El diseño es ligeramente diferente en ELF de 32 bits frente a ELF de 64 bits , porque el p_flags están en una ubicación de estructura diferente por razones de alineación. Cada entrada está estructurada como:
Compensar | Tamaño (bytes) | Campo | Propósito | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32 bits | 64 bits | 32 bits | 64 bits | ||||||||||||||||||||||||||||||||||||||
0x00 | 4 | p_type | Identifica el tipo de segmento.
PT_LOOS a PT_HIOS ( PT_LOPROC a PT_HIPROC ) es un rango reservado inclusivo para la semántica específica del sistema operativo (procesador). | ||||||||||||||||||||||||||||||||||||||
0x04 | 4 | p_flags | Indicadores dependientes del segmento (posición para estructura de 64 bits). | ||||||||||||||||||||||||||||||||||||||
0x04 | 0x08 | 4 | 8 | p_offset | Desplazamiento del segmento en la imagen del archivo. | ||||||||||||||||||||||||||||||||||||
0x08 | 0x10 | 4 | 8 | p_vaddr | Dirección virtual del segmento en memoria. | ||||||||||||||||||||||||||||||||||||
0x0C | 0x18 | 4 | 8 | p_paddr | En sistemas donde la dirección física es relevante, reservada para la dirección física del segmento. | ||||||||||||||||||||||||||||||||||||
0x10 | 0x20 | 4 | 8 | p_filesz | Tamaño en bytes del segmento en la imagen del archivo. Puede ser 0. | ||||||||||||||||||||||||||||||||||||
0x14 | 0x28 | 4 | 8 | p_memsz | Tamaño en bytes del segmento en memoria. Puede ser 0. | ||||||||||||||||||||||||||||||||||||
0x18 | 4 | p_flags | Banderas dependientes del segmento (posición para estructura de 32 bits). | ||||||||||||||||||||||||||||||||||||||
0x1C | 0x30 | 4 | 8 | p_align | 0 y 1 no especifique alineación. De lo contrario, debe ser una potencia integral positiva de 2, con p_vaddr equiparando módulo p_offsetp_align . | ||||||||||||||||||||||||||||||||||||
0x20 | 0x38 | Fin del encabezado del programa (tamaño) |
Encabezado de sección
Compensar | Tamaño (bytes) | Campo | Propósito | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32 bits | 64 bits | 32 bits | 64 bits | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | sh_name | Un desplazamiento a una cadena en la sección .shstrtab que representa el nombre de esta sección. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 4 | sh_type | Identifica el tipo de este encabezado.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 4 | 8 | sh_flags | Identifica los atributos de la sección.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0C | 0x10 | 4 | 8 | sh_addr | Dirección virtual de la sección en memoria, para las secciones que se cargan. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 0x18 | 4 | 8 | sh_offset | Desplazamiento de la sección en la imagen del archivo. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 0x20 | 4 | 8 | sh_size | Tamaño en bytes de la sección en la imagen del archivo. Puede ser 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 0x28 | 4 | sh_link | Contiene el índice de sección de una sección asociada. Este campo se utiliza para varios propósitos, según el tipo de sección. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x2C | 4 | sh_info | Contiene información adicional sobre la sección. Este campo se utiliza para varios propósitos, según el tipo de sección. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x30 | 4 | 8 | sh_addralign | Contiene la alineación requerida de la sección. Este campo debe ser una potencia de dos. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x38 | 4 | 8 | sh_entsize | Contiene el tamaño, en bytes, de cada entrada, para las secciones que contienen entradas de tamaño fijo. De lo contrario, este campo contiene cero. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x40 | Encabezado de fin de sección (tamaño) |
Herramientas
readelf
es una utilidad binaria de Unix que muestra información sobre uno o más archivos ELF. Un software libre aplicación es proporcionada por Binutils GNU .elfutils
proporciona herramientas alternativas a GNU Binutils exclusivamente para Linux. [10]elfdump
es un comando para ver información ELF en un archivo ELF, disponible en Solaris y FreeBSD .objdump
proporciona una amplia gama de información sobre archivos ELF y otros formatos de objeto.objdump
utiliza la biblioteca Binary File Descriptor como back-end para estructurar los datos ELF.- La
file
utilidad Unix puede mostrar información sobre los archivos ELF, incluida la arquitectura del conjunto de instrucciones para la que está destinado el código en un archivo de objeto reubicable, ejecutable o compartido, o en el que se produjo un volcado de núcleo ELF .
Aplicaciones
Sistemas similares a Unix
El formato ELF ha reemplazado a los formatos ejecutables más antiguos en varios entornos. Ha reemplazado los formatos a.out y COFF en sistemas operativos similares a Unix:
- Linux
- Solaris / Illumos
- IRIX
- FreeBSD [11]
- NetBSD
- OpenBSD
- Redox
- DragonFly BSD
- Sílaba
- HP-UX (excepto para programas PA-RISC de 32 bits que continúan usando SOM )
- QNX Neutrino
- MINIX [12]
Adopción no Unix
ELF también ha tenido cierta adopción en sistemas operativos que no son Unix, como:
- OpenVMS , en sus versiones Itanium y amd64 [13]
- BeOS Revision 4 y posterior para computadoras basadas en x86 (donde reemplazó el formato ejecutable portátil ; la versión de PowerPC se mantuvo con el formato ejecutable preferido )
- Haiku , una reimplementación de código abierto de BeOS
- Sistema operativo RISC [14]
- Stratus VOS , en versiones PA-RISC y x86
- Actualización de aniversario de Windows 10 mediante el subsistema de Windows para Linux . [15] [16]
- SkyOS
- SO fucsia
- Z / TPF
- SO HPE NonStop [17]
- Deos
Consolas de juegos
Algunas consolas de juegos también usan ELF:
- PlayStation Portable , [18] PlayStation Vita , PlayStation (consola) , PlayStation 2 , PlayStation 3 , PlayStation 4 , PlayStation 5
- GP2X
- Dreamcast
- Cubo de juego
- Wii
- Wii U
PowerPC
Otros sistemas (operativos) que se ejecutan en PowerPC que usan ELF:
- AmigaOS 4 , el ejecutable ELF ha reemplazado al formato Extended Hunk (EHF) anterior que se usaba en Amigas equipados con tarjetas de expansión de procesador PPC.
- MorphOS
- AROS
Teléfonos móviles
Algunos sistemas operativos para teléfonos móviles y dispositivos móviles utilizan ELF:
- Symbian OS v9 usa el formato E32Image [19] que se basa en el formato de archivo ELF;
- Sony Ericsson , por ejemplo, el W800i , W610 , W300 , etc.
- Siemens , las plataformas SGOLD y SGOLD2: desde Siemens C65 hasta S75 y BenQ-Siemens E71 / EL71 ;
- Motorola , por ejemplo, el E398, SLVR L7 , v360, v3i (y todos los teléfonos LTE2 que tienen el parche aplicado).
- Bada , por ejemplo, el Samsung Wave S8500 .
- Teléfonos o tabletas Nokia que ejecutan Maemo o Meego OS, por ejemplo, el Nokia N900 .
- Android usa ELF Bibliotecas .so (objeto compartido [20] ) para la interfaz nativa de Java . Con Android Runtime (ART), el valor predeterminado desde Android 5.0 "Lollipop" , todas las aplicaciones se compilan en binarios ELF nativos durante la instalación.
Algunos teléfonos pueden ejecutar archivos ELF mediante el uso de un parche que agrega código de ensamblaje al firmware principal , que es una característica conocida como ELFPack en la cultura de modding clandestina . El formato de archivo ELF también se utiliza con las arquitecturas de microcontroladores Atmel AVR (8 bits), AVR32 [21] y Texas Instruments MSP430 . Algunas implementaciones de Open Firmware también pueden cargar archivos ELF, sobre todo la implementación de Apple utilizada en casi todas las máquinas PowerPC que produjo la empresa.
Especificaciones
- Genérico:
- Interfaz binaria de la aplicación System V Edición 4.1 (18-03-1997)
- Actualización de System V ABI (octubre de 2009)
- AMD64 :
- Suplemento de System V ABI, AMD64
- BRAZO :
- ELF para la arquitectura ARM
- IA-32 :
- System V ABI, suplemento de procesador de arquitectura Intel386
- IA-64 :
- Guía de tiempo de ejecución y convenciones del software Itanium (septiembre de 2000)
- M32R :
- M32R ELF ABI Supplement Versión 1.2 (2004-08-26)
- MIPS :
- Suplemento de procesador System V ABI, MIPS RISC
- Documentación de MIPS EABI (2003-06-11)
- Motorola 6800 :
- ABI integrado de 8 y 16 bits de Motorola
- PA-RISC :
- Suplemento ELF para PA-RISC versión 1.43 (6 de octubre de 1997)
- PowerPC :
- Sistema V ABI, suplemento PPC
- Implementación de la interfaz binaria de la aplicación integrada PowerPC de 32 bits (1995-10-01)
- Suplemento de interfaz binaria de aplicación PowerPC ELF de 64 bits, versión 1.9 (2004)
- SPARC :
- Sistema V ABI, suplemento SPARC
- S / 390 :
- Suplemento S / 390 32bit ELF ABI
- zSeries :
- Suplemento ABI zSeries 64bit ELF
- Symbian OS 9:
- Formato de archivo E32Image en Symbian OS 9
El Linux Standard Base (LSB) complementa algunas de las especificaciones anteriores para arquitecturas en las que se especifica. [22] Por ejemplo, ese es el caso del System V ABI, AMD64 Supplement. [23] [24]
86 abierto
86open fue un proyecto para llegar a un consenso sobre un formato de archivo binario común para Unix y sistemas operativos similares a Unix en la arquitectura común x86 compatible con PC , para alentar a los desarrolladores de software a migrar a la arquitectura. [25] La idea inicial era estandarizar en un pequeño subconjunto de Spec 1170, un predecesor de la Especificación Única de UNIX , y la Biblioteca GNU C (glibc) para permitir que los binarios no modificados se ejecuten en los sistemas operativos x86 similares a Unix. El proyecto se denominó originalmente "Spec 150".
El formato finalmente elegido fue ELF, específicamente la implementación de ELF en Linux, después de que resultó ser un estándar de facto respaldado por todos los proveedores y sistemas operativos involucrados.
El grupo inició conversaciones por correo electrónico en 1997 y se reunió por primera vez en las oficinas de la Operación Santa Cruz el 22 de agosto de 1997.
El comité directivo fue Marc Ewing , Dion Johnson, Evan Leibovitch, Bruce Perens , Andrew Roach, Bryan Wayne Sparks y Linus Torvalds . Otras personas en el proyecto fueron Keith Bostic , Chuck Cranor, Michael Davidson, Chris G. Demetriou, Ulrich Drepper, Don Dugger, Steve Ginzburg, Jon "maddog" Hall , Ron Holt, Jordan Hubbard , Dave Jensen, Kean Johnston, Andrew Josey, Robert Lipe, Bela Lubkin, Tim Marsland, Greg Page, Ronald Joe Record, Tim Ruckle, Joel Silverstein, Chia-pi Tien y Erik Troan. Los sistemas operativos y las empresas representadas fueron BeOS , BSDI , FreeBSD , Intel , Linux , NetBSD , SCO y SunSoft .
El proyecto avanzó y, a mediados de 1998, SCO comenzó a desarrollar lxrun , una capa de compatibilidad de código abierto capaz de ejecutar binarios de Linux en OpenServer , UnixWare y Solaris . SCO anunció el soporte oficial de lxrun en LinuxWorld en marzo de 1999. Sun Microsystems comenzó a admitir oficialmente lxrun para Solaris a principios de 1999, [26] y luego pasó al soporte integrado del formato binario Linux a través de Solaris Containers for Linux Applications .
Dado que los BSD han soportado durante mucho tiempo los binarios de Linux (a través de una capa de compatibilidad ) y los principales proveedores de Unix x86 han añadido soporte para el formato, el proyecto decidió que Linux ELF era el formato elegido por la industria y "declara [d] disuelto" en 25 de julio de 1999. [27]
FatELF: binarios universales para Linux
FatELF es una extensión de formato binario ELF que agrega capacidades binarias gordas . [28] Está dirigido a Linux y otros sistemas operativos similares a Unix. Además de la abstracción de la arquitectura de la CPU ( orden de bytes , tamaño de la palabra , conjunto de instrucciones de la CPU , etc.), existe la ventaja potencial de la abstracción de la plataforma de software, por ejemplo, binarios que soportan múltiples versiones de ABI del kernel . A 2 de marzo de 2021[actualizar], FatELF no se ha integrado en la línea principal del kernel de Linux. [29] [30] [31]
Ver también
- Interfaz binaria de la aplicación
- Comparación de formatos de archivos ejecutables
- DWARF : un formato para depurar datos
- Estándar de compatibilidad binaria de Intel
- Ejecutable portátil : formato utilizado por Windows
- vDSO - DSO virtual
- Código independiente de la posición
Referencias
- ^ a b Versión 1.2 de la especificación de formato ejecutable y de enlace (ELF) de Tool Interface Standard (TIS) (mayo de 1995)
- ↑ System V Application Binary Interface Edition 4.1 (18 de marzo de 1997)
- ^ "Lexers disponibles - Pigmentos" . pygments.org .
- ^ "Encabezado ELF" . Sco.com. Julio de 2000 . Consultado el 7 de febrero de 2014 .
- ^ "LXR linux / include / linux / elf.h" . linux.no . Consultado el 27 de abril de 2015 .
- ^ "glibc 2.12 anuncio" .
- ^ "sourceware.org Git - glibc.git / blob - libc-abis" .
- ^ "sourceware.org Git - glibc.git / blob - sysdeps / gnu / ldsodefs.h" .
- ^ "Encabezado del programa" . Sco.com. Julio de 2000 . Consultado el 5 de abril de 2017 .
- ^ "elfutils" . sourceware.org . Consultado el 30 de abril de 2017 .
- ^ "Formatos binarios" .
- ^ "MinixReleases - Minix Wiki" . Wiki.minix3.org. Archivado desde el original el 30 de marzo de 2013 . Consultado el 19 de enero de 2014 .
- ^ https://vmssoftware.com/pdfs/State_of_Port_20160906.pdf
- ^ "GCCSDK - RISC OS" . Riscos.info. 2012-04-22 . Consultado el 19 de enero de 2014 .
- ^ "Anuncio de Windows 10 Insider Preview Build 14316" . Blog de experiencia de Windows . 2016-04-06 . Consultado el 10 de abril de 2016 .
- ^ Foley, Mary Jo. "Bajo el capó del subsistema de Windows de Microsoft para Linux | ZDNet" . ZDNet . Consultado el 19 de agosto de 2016 .
- ^ "Guía del programador de Guardian" (PDF) . Hewlett Packard Enterprise. Archivado desde el original (PDF) el 30 de mayo de 2018 . Consultado el 30 de mayo de 2018 .pag. 44 archivado desde el original el 30 de mayo de 2018
- ^ Uso de PlayStation Portable ELF cifrado y reubicado: PSP
- ^ Formato de archivo ejecutable del sistema operativo Symbian
- ^ Rosen, Kenneth; Anfitrión, Douglas; Klee, Rachel; Rosinski, Richard (2007). UNIX: La referencia completa (2 ed.). Profesional de McGraw Hill. pag. 707. ISBN 9780071706988. Consultado el 8 de junio de 2017 .
Las bibliotecas vinculadas dinámicamente también se denominan objetos compartidos (.so).
- ^ "Capítulo 4: Archivos de objeto" , Interfaz binaria de aplicación de System V , 26-10-2009, e_machine
- ^ "Especificaciones de referencia LSB" . linuxfoundation.org . Consultado el 27 de abril de 2015 .
- ^ "Formato ejecutable y de vinculación (ELF)" . linuxfoundation.org . Consultado el 27 de abril de 2015 .
- ^ "Introducción" . linuxfoundation.org . Consultado el 27 de abril de 2015 .
- ^ Leibovitch, Evan (23 de diciembre de 1997). "86Preguntas frecuentes sobre Open" . Archivado desde el original el 11 de marzo de 2007 . Consultado el 6 de junio de 2007 .
- ^ Record, Ronald (21 de mayo de 1998). "Boletín sobre el estado de 86open en SCO" . Archivado desde el original el 8 de diciembre de 2008 . Consultado el 6 de mayo de 2008 .
- ^ Leibovitch, Evan (25 de julio de 1999). "Proyecto The86open - Actualización final" . Archivado desde el original el 27 de febrero de 2007 . Consultado el 6 de mayo de 2007 .
- ^ Gordon, Ryan. "especificación de fatelf v1" . icculus.org . Consultado el 25 de julio de 2010 .
- ^ Gordon, Ryan. "FatELF: Resulta que me gustó más la incertidumbre" . icculus.org . Consultado el 13 de julio de 2010 .
- ^ Holwerda, Thom (3 de noviembre de 2009). "Ryan Gordon detiene el proyecto FatELF" . osnews.com . Consultado el 5 de julio de 2010 .
- ^ Brockmeier, Joe (23 de junio de 2010). "YO: Anatomía de una (supuesta) falla" . Noticias semanales de Linux . Consultado el 6 de febrero de 2011 .
Otras lecturas
- Levine, John R. (2000) [octubre de 1999]. Enlazadores y cargadores . La Serie Morgan Kaufmann en Ingeniería de Software y Programación (1 ed.). San Francisco, Estados Unidos: Morgan Kaufmann . ISBN 1-55860-496-0. OCLC 42413382 . Archivado desde el original el 5 de diciembre de 2012 . Consultado el 12 de enero de 2020 .Código: [1] [2] Errata: [3]
- Drepper, Ulrich (20 de agosto de 2006). "Cómo escribir bibliotecas compartidas" (PDF) . 4.0 . Consultado el 20 de junio de 2007 . Cite journal requiere
|journal=
( ayuda ) - Un héroe olvidado: The hardworking ELF por Peter Seebach, 20 de diciembre de 2005, archivado desde el original el 24 de febrero de 2007
- LibElf y GElf: una biblioteca para manipular archivos ELf en Wayback Machine (archivado el 25 de febrero de 2004)
- El formato de archivo de objeto ELF por disección por Eric Youngdale (1995-05-01)
- Un tutorial vertiginoso sobre la creación de ejecutables ELF realmente teensy para Linux por Brian Raiter
- Reubicación de ELF en objetos no reubicables por Julien Vanegue (2003-08-13)
- Depuración de ELF incorporada sin ptrace por el equipo de ELFsh (2005-08-01)
- Estudio de carga ELF y relocs por Pat Beirne (1999-08-03)
enlaces externos
- Manual de FreeBSD: formatos binarios (versión archivada)
- FreeBSD elf (5) página de manual
- Preguntas frecuentes sobre NetBSD ELF
- Linux elf (5) página de manual
- Guía de bibliotecas y vinculadores de Oracle Solaris
- El proyecto ERESI: ingeniería inversa en sistemas operativos basados en ELF
- Artículo de Linux Today sobre 86open 26 de julio de 1999
- Anuncio de 86open en la lista de correo de Debian Announce 10 de octubre de 1997, Bruce Perens
- Declaración de Ulrich Drepper (PDF) en The SCO Group vs IBM , 19 de septiembre de 2006
- 86 Discusión abierta y ELF sobre Groklaw , 13 de agosto de 2006