Un archivo objeto es un archivo que contiene código máquina o bytecode , así como otros datos y metadatos , generados por un compilador o ensamblador a partir del código fuente durante el proceso de compilación o ensamblaje. El código máquina generado se conoce como código objeto .
El código objeto suele ser reubicable y no directamente ejecutable . Existen diversos formatos para archivos objeto, y el mismo código máquina puede empaquetarse en diferentes formatos. Un archivo objeto también puede funcionar como una biblioteca compartida .
Los metadatos que pueden contener los archivos objeto se pueden usar para enlazar o depurar; incluyen información para resolver referencias cruzadas simbólicas entre diferentes módulos, información de reubicación , información de desenrollado de pila , comentarios , símbolos de programa e información de depuración o análisis de rendimiento . Otros metadatos pueden incluir la fecha y hora de compilación, el nombre y la versión del compilador, y otra información de identificación.
El término "programa objeto" data al menos de la década de 1950:
Un término en programación automática para el programa en lenguaje máquina producido por la máquina al traducir un programa fuente escrito por el programador en un lenguaje similar a la notación algebraica. [ 1 ]
Un enlazador se utiliza para combinar el código objeto en un único programa ejecutable o biblioteca, incorporando las bibliotecas del sistema precompiladas según sea necesario.
formatos de archivos objeto
Existen muchos formatos de archivo de objeto diferentes; originalmente, cada tipo de ordenador y software de soporte tenía su propio formato único, como el formato de archivo de objeto OS/360 , pero con la llegada de Unix y otros sistemas operativos portátiles , algunos formatos, como COFF , ELF y Mach-O , se han definido y utilizado en diferentes tipos de sistemas.
Algunos sistemas distinguen entre formatos directamente ejecutables y formatos que requieren procesamiento por parte del enlazador . Por ejemplo, OS/360 y sus sucesores denominan al primer formato módulo de carga y al segundo módulo objeto . En este caso, los archivos tienen formatos completamente diferentes. [ 2 ] DOS y Windows también tienen formatos de archivo distintos para archivos ejecutables y archivos objeto, como Portable Executable para ejecutables y COFF para archivos objeto en Windows de 32 y 64 bits.
Los sistemas Unix y similares han utilizado el mismo formato para archivos ejecutables y de objeto, comenzando con el formato original a.out . Algunos formatos pueden contener código máquina para diferentes procesadores, y el sistema operativo elige el correcto cuando se carga el programa. [ 3 ] [ 4 ]
El diseño y/o la elección del formato de archivo objeto es fundamental para el diseño general del sistema. Influye en el rendimiento del enlazador y, por lo tanto, en el tiempo de desarrollo del programa. Si el formato se utiliza para archivos ejecutables, el diseño también afecta el tiempo de ejecución de los programas y, en consecuencia, la capacidad de respuesta para los usuarios.
La biblioteca de descriptores de archivos binarios (biblioteca BFD) del Proyecto GNU proporciona una API común para la manipulación de archivos objeto en una variedad de formatos.
Archivos absolutos
Muchos ordenadores antiguos, o microordenadores pequeños , solo admiten un formato de objeto absoluto. Los programas no son reubicables; necesitan ser ensamblados o compilados para ejecutarse en direcciones específicas y predefinidas. El archivo no contiene información de reubicación ni de enlace. Estos archivos pueden cargarse en memoria de lectura/escritura o almacenarse en memoria de solo lectura . Por ejemplo, el monitor Motorola 6800 MIKBUG contiene una rutina para leer un archivo de objeto absoluto ( formato SREC ) desde una cinta de papel . [ 5 ] Los archivos COM de DOS son un ejemplo más reciente de archivos de objeto absoluto. [ 6 ]
Segmentación
La mayoría de los formatos de archivos objeto se estructuran como secciones de datos separadas, cada una con un tipo específico de datos. Estas secciones se conocen como "segmentos" debido al término " segmento de memoria ", que anteriormente era una forma común de gestión de memoria . Cuando un cargador carga un programa en la memoria , le asigna diversas regiones de memoria. Algunas de estas regiones corresponden a secciones del archivo objeto y, por lo tanto, suelen tener el mismo nombre. Otras, como la pila, solo existen en tiempo de ejecución. En algunos casos, el cargador (o enlazador) realiza la reubicación para especificar las direcciones de memoria reales. Sin embargo, para muchos programas o arquitecturas, la reubicación no es necesaria, ya que la gestiona la unidad de gestión de memoria o el código independiente de la posición . En algunos sistemas, los segmentos del archivo objeto se pueden copiar (paginar) en la memoria y ejecutar sin necesidad de procesamiento adicional. En estos sistemas, esto se puede hacer de forma diferida , es decir, solo cuando se hace referencia a los segmentos durante la ejecución, por ejemplo, a través de un archivo mapeado en memoria respaldado por el archivo objeto.
Tipos de datos admitidos por los formatos de archivo de objeto típicos: [ 7 ]
- Encabezado (información descriptiva y de control)
- Segmento de código ("segmento de texto", código ejecutable)
- Segmento de datos ( variables estáticas inicializadas )
- Segmento de datos de solo lectura ( datos de registro , constantes estáticas inicializadas )
- Segmento BSS (datos estáticos no inicializados, tanto variables como constantes)
- Definiciones y referencias externas para la vinculación
- Información sobre reubicación
- Información de vinculación dinámica
- Información de depuración
Los segmentos de diferentes archivos objeto pueden ser combinados por el enlazador según las reglas especificadas al definir los segmentos. Existen convenciones para los segmentos compartidos entre archivos objeto; por ejemplo, en DOS existen diferentes modelos de memoria que especifican los nombres de los segmentos especiales y si pueden o no combinarse. [ 8 ]
El formato de datos de depuración de la información de depuración puede ser una parte integral del formato del archivo objeto, como en COFF , o un formato semiindependiente que puede usarse con varios formatos de objeto, como stabs o DWARF .
Véase también
- Formato de archivo objeto hexadecimal de Intel (normalmente con extensión de archivo .HEX, pero a veces también con .OBJ)
- Formato de módulo de objetos (ICL) (OMF para ICL VME)
- Formato de módulo objeto (Intel) (OMF para Intel 8080/8085, OBJ para Intel 8086)
- Ejecutable
- Unidad de traducción (programación)
- Encabezado precompilado
- Módulos (C++)
Referencias
- ↑ Wrubel, Marshal H. (1959). Un manual de programación para computadoras digitales . Nueva York, EE. UU.: McGraw-Hill . pág. 222. Recuperado el 31 de julio de 2020 .
- ↑ Editor y cargador de enlaces del sistema operativo de IBM (PDF) . IBM Corporation . 1973. pág. 16. Consultado el 6 de agosto de 2012 .
- ↑ "Binarios universales y binarios PowerPC de 32/64 bits" . Referencia del formato de archivo ABI Mach-O de OS X. Apple Inc. 4 de febrero de 2009 [2003]. Archivado del original el 4 de septiembre de 2014.
- ↑ "FatELF: Binarios universales para Linux" . Consultado el 2 de agosto de 2020 .
- ↑ Wiles, Mike; Felix, Andre. ROM MCM6830L7 MIKBUG/MINIBUG (PDF) . Motorola Semiconductor Products, Inc. Recuperado el 31 de julio de 2020 .
- ^ Dios, Deepali A.; Godse, Atul P. (2008). Microprocesador (1 ed.). Pune, India: Publicaciones técnicas. págs. 3 a 15. ISBN 978-81-8431-355-0.
- ↑ Mauerer, Wolfgang (2010). «Apéndice E. El formato binario ELF» . Arquitectura profesional del kernel de Linux . John Wiley & Sons . pág. Apéndice E. ISBN 978-0-470-34343-2. Consultado el 1 de agosto de 2020 .
- ↑ Irvine, Kip R. (1993). Lenguaje ensamblador para IBM-PC (2.ª ed.). Nueva York, EE. UU.: Macmillan. ISBN 0-02-359651-1.
Lecturas adicionales
- Levine, John R. (2000) [octubre de 1999]. «Capítulo 3: Archivos objeto» . Enlazadores y cargadores . Serie Morgan Kaufmann de ingeniería de software y programación (1.ª ed.). San Francisco, California, EE. UU.: Morgan Kaufmann . pág. 256. ISBN 1-55860-496-0. OCLC 42413382 . Consultado el 12 de enero de 2020 .
{{cite book}}: CS1 maint: servicio de archivado obsoleto ( enlace ) Código:Erratas: - Formato de archivo OBJ de Microsoft . Microsoft , Servicios de soporte de productos. Nota de aplicación SS0288 . Consultado el 21 de agosto de 2017 .
{{cite book}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - Elliott, John C. (2002). "Formato de archivo REL de Microsoft" . seasip.info . Archivado del original el 25/11/2023 . Recuperado el 25/11/2023 .(Nota: Descripción del formato de archivo REL de Microsoft para objetos reubicables, también utilizado por Digital Research).
- Elliott, John C. (5 de junio de 2012) [2 de enero de 2000]. "Formato de archivo PRL" . seasip.info . Archivado del original el 26 de enero de 2020. Recuperado el 26 de enero de 2020 .
- Fraser, Christopher "Chris" W. ; Hanson, David R. (abril–mayo de 1982) [1981-09-09, 1981-11-02]. "Un enlazador independiente de la máquina" (PDF) . Software: Practice and Experience . 12 (4). Universidad de Arizona, Tucson, Arizona, EE. UU.: John Wiley & Sons, Ltd. : 351– 366. doi : 10.1002/spe.4380120407 . ISSN 0038-0644 . Archivado (PDF) del original el 28-11-2023 . Recuperado el 28-11-2023 . (16 páginas)
- Montuelle, Jean; Willers, Ian (25–28 de septiembre de 1979) [octubre de 1978]. Escrito en el CERN, Ginebra, Suiza. Cross Software Using a Universal Object Module Format, CUFOM . Euro IFIP, Londres, Reino Unido. CERN-DD/78/20 . Consultado el 28 de noviembre de 2023 .(1+23 páginas)
- Formato universal de microprocesadores para módulos de objetos, MUFOM (borrador del documento), Grupo de trabajo IEEE , P695lD2
- Montuelle, Jean; Willers, Ian (septiembre de 1982). «Carta al editor» . Software: Practice and Experience . 12 (9). CERN, Ginebra, Suiza: John Wiley & Sons, Ltd. : 883–884 [884]. doi : 10.1002/spe.4380120909 . ISSN 0038-0644 . (1 página) (Nota: Describe la historia y la relación de IEEE 695 con CUFOM y MUFOM).
- IEEE 695-1990: Norma IEEE para el formato universal de microprocesadores para módulos de objetos . IEEE . 5 de febrero de 1990. doi : 10.1109/IEEESTD.1990.101062 . ISBN 978-0-7381-3028-6.(Nota: Sustituye a la norma IEEE 695-1985 (9 de septiembre de 1985)).
- Formatos de archivos ejecutables
- Construcción de compiladores
- Bibliotecas informáticas
- Implementación del lenguaje de programación