Por diseño, el formato ELF es flexible, extensible y multiplataforma . Por ejemplo, admite distintos ordenes de bytes y tamaños de direcciones, por lo que no excluye ninguna arquitectura de CPU o conjunto de instrucciones en particular. Esto ha permitido que muchos sistemas operativos diferentes lo adopten 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:
El encabezado ELF define si se deben utilizar direcciones de 32 o 64 bits . El encabezado contiene tres campos que se ven afectados por esta configuración y desplazan otros campos que los siguen. El encabezado ELF tiene una longitud de 52 o 64 bytes para binarios de 32 y 64 bits respectivamente.
Encabezado del programa
La tabla de encabezado del programa le indica 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 un tamaño e_phentsize . El diseño es ligeramente diferente en ELF de 32 bits frente a ELF de 64 bits , porque los p_flags están en una ubicación de estructura diferente por razones de alineación. Cada entrada está estructurada como:
Encabezado de sección
Herramientas
readelfes una utilidad binaria de Unix que muestra información sobre uno o más archivos ELF. GNU Binutils ofrece una implementación de software libre .
elfutilsProporciona herramientas alternativas a GNU Binutils exclusivamente para Linux. [10]
elfdumpes un comando para ver información ELF en un archivo ELF, disponible en Solaris y FreeBSD .
objdumpProporciona una amplia gama de información sobre archivos ELF y otros formatos de objetos. objdumpUtiliza la biblioteca Binary File Descriptor como back-end para estructurar los datos ELF.
La utilidad Unix filepuede mostrar cierta información sobre archivos ELF, incluida la arquitectura del conjunto de instrucciones para el cual 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 tipo Unix
El formato ELF ha reemplazado a los formatos ejecutables más antiguos en varios entornos. Ha reemplazado a los formatos a.out y COFF en sistemas operativos tipo Unix :
Otros sistemas (operativos) que se ejecutan en PowerPC y que utilizan ELF:
AmigaOS 4 , el ejecutable ELF ha reemplazado al anterior Extended Hunk Format (EHF) que se usaba en Amigas equipados con tarjetas de expansión de procesador PPC.
Android utiliza bibliotecas ELF .so (objeto compartido [19] ) para la interfaz nativa de Java . [ cita requerida ] Con Android Runtime (ART), el valor predeterminado desde Android 5.0 "Lollipop" , todas las aplicaciones se compilan en binarios ELF nativos en la instalación. [20] También es posible utilizar software nativo de Linux desde administradores de paquetes como Termux, o compilarlos desde fuentes a través de Clang o GCC, que están disponibles en repositorios.
Solana utiliza el formato ELF para sus programas en cadena ( contratos inteligentes ). La plataforma procesa archivos ELF compilados en código de bytes BPF ( Berkeley Packet Filter ), que luego se implementan como objetos compartidos y se ejecutan en el entorno de ejecución de Solana. El cargador BPF valida y procesa estos archivos ELF durante la implementación del programa. [22]
El formato finalmente elegido fue ELF, específicamente la implementación de ELF para Linux, después de que resultó ser un estándar de facto respaldado por todos los proveedores y sistemas operativos involucrados.
El grupo comenzó a discutir 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 estuvo formado por Marc Ewing , Dion Johnson, Evan Leibovitch, Bruce Perens , Andrew Roach, Bryan Wayne Sparks y Linus Torvalds . Otras personas que participaron 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 .
Como los BSD habían soportado durante mucho tiempo los binarios de Linux (a través de una capa de compatibilidad ) y los principales proveedores de Unix x86 habían agregado soporte para el formato, el proyecto decidió que Linux ELF era el formato elegido por la industria y "se declaró disuelto" el 25 de julio de 1999. [25]
^ "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h". Archivado desde el original el 7 de marzo de 2021. Consultado el 28 de octubre de 2019 .
^ "Encabezado de 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". Archivado desde el original el 2019-03-31 . Consultado el 2019-03-31 .
^ "MinixReleases – Minix Wiki". Wiki.minix3.org. Archivado desde el original el 2013-03-30 . Consultado el 2014-01-19 .
^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 15 de septiembre de 2020. Consultado el 19 de octubre de 2016 .{{cite web}}: CS1 maint: copia archivada como título ( enlace )
^ "GCCSDK – RISC OS". Riscos.info. 22 de abril de 2012. Archivado desde el original el 19 de febrero de 2014. Consultado el 19 de enero de 2014 .
^ "Guía del programador de Guardian" (PDF) . Hewlett Packard Enterprise. Archivado desde el original (PDF) el 2018-05-30 . Consultado el 2018-05-30 .p. 44 archivado desde el original el 30-5-2018
^ Foley, Mary Jo. "Bajo el capó del subsistema Windows de Microsoft para Linux". ZDNet . Consultado el 19 de agosto de 2016 .
^ PlayStation Portable utiliza ELF cifrado y reubicado: PSP
^ Formato de archivo ejecutable del sistema operativo Symbian
^ Rosen, Kenneth; Host, Douglas; Klee, Rachel; Rosinski, Richard (2007). UNIX: The Complete Reference (2.ª edición). McGraw Hill Professional. pág. 707. ISBN9780071706988. Recuperado el 8 de junio de 2017. Las bibliotecas vinculadas dinámicamente también se denominan objetos compartidos (.so).
^ Thomas, Romain. «Formatos Android». Quarks Lab . Archivado desde el original el 16 de febrero de 2023. Consultado el 17 de enero de 2023 .
^ "Capítulo 4: Archivos de objetos", Interfaz binaria de aplicación de System V , 26 de octubre de 2009, e_machine
^ "Programas Solana". Fundación Solana. 2024-11-11 . Consultado el 2024-11-11 . Solana aprovecha la infraestructura del compilador LLVM para compilar programas en archivos de formato ejecutable y enlazable (ELF).
^ Leibovitch, Evan (23 de diciembre de 1997). «86Open Frequently-Asked Questions». 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 la 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). «The86open Project – Final Update». Archivado desde el original el 27 de febrero de 2007. Consultado el 6 de mayo de 2007 .
^ Gordon, Ryan. "fatelf-specification v1". icculus.org . Consultado el 25 de julio de 2010 .
^ Gordon, Ryan. "FatELF: Resulta que me gustaba 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). "SELF: Anatomía de un (supuesto) fracaso". Linux Weekly News . Consultado el 6 de febrero de 2011 .
Lectura adicional
Levine, John R. (2000) [octubre de 1999]. Linkers and Loaders. La serie Morgan Kaufmann sobre ingeniería de software y programación (1.ª edición). San Francisco, EE. UU.: 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] Erratas: [3]
Ulrich Drepper, How To Write Shared Libraries, versión 4.1.2 (2011). Publicado en la página web del autor, https://www.akkadia.org/drepper.
Un héroe anónimo: el ELF, un hombre muy trabajador, 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: Introducción , El formato de archivo de objeto ELF por análisis de Eric Youngdale (1 de mayo de 1995)
Un tutorial relámpago sobre cómo crear ejecutables ELF realmente pequeños para Linux por Brian Raiter
Reubicación de ELF en objetos no reubicables por Julien Vanegue (13 de agosto de 2003)
Depuración de ELF integrada sin ptrace por el equipo ELFsh (1 de agosto de 2005)
Estudio de la carga ELF y las reubicaciones por Pat Beirne (1999-08-03)
Enlaces externos
Manual de FreeBSD: formatos binarios (versión archivada)
Página del manual de elf(5) de FreeBSD
Preguntas frecuentes sobre ELF de NetBSD
Página del manual de Linux elf(5)
Guía de bibliotecas y enlazadores de Oracle Solaris
El proyecto ERESI: ingeniería inversa en sistemas operativos basados en ELF Archivado el 14 de marzo de 2021 en Wayback Machine
Artículo de Linux Today sobre 86open del 26 de julio de 1999
Anuncio de 86open en la lista de correo Debian Announce 10 de octubre de 1997, Bruce Perens
Declaración de Ulrich Drepper (PDF) en el caso The SCO Group vs IBM , 19 de septiembre de 2006
Discusión sobre 86open y ELF Archivado el 1 de febrero de 2019 en Wayback Machine en Groklaw , 13 de agosto de 2006