stringtranslate.com

Archivo de objeto

Un archivo objeto es un archivo que contiene código de máquina o código de bytes , 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 de máquina que se genera se conoce como código objeto .

El código objeto suele ser reubicable y normalmente no ejecutable directamente . Existen varios formatos para archivos de objetos y el mismo código de máquina se puede empaquetar en diferentes formatos de archivos de objetos. Un archivo objeto también puede funcionar como una biblioteca compartida .

Los metadatos que pueden incluir los archivos objeto se pueden utilizar para vincular o depurar; Incluye: 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 , información de depuración o creación de perfiles . 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:

Término en programación automática para el programa en lenguaje de 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]

Se utiliza un vinculador para combinar el código objeto en un programa ejecutable o biblioteca que incorpora bibliotecas del sistema precompiladas según sea necesario.

Formatos de archivos de objetos

Hay muchos formatos de archivos de objetos diferentes; Originalmente, cada tipo de computadora tenía su propio formato único, pero con la llegada de Unix y otros sistemas operativos portátiles , algunos formatos, como ELF y COFF , se han definido y utilizado en diferentes tipos de sistemas.

Algunos sistemas hacen una distinción entre formatos que son directamente ejecutables y formatos que requieren procesamiento por parte del vinculador . Por ejemplo, OS/360 y sus sucesores llaman al primer formato un módulo de carga y al segundo un módulo de objeto . En este caso los archivos tienen formatos completamente diferentes. [2] DOS y Windows también tienen diferentes formatos de archivo 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 objetos, comenzando con el formato a.out original . Algunos formatos pueden contener código de máquina para diferentes procesadores, y el sistema operativo elige el correcto cuando se carga el programa. [3] [4]

El diseño y/o elección de un formato de archivo objeto es una parte clave del diseño general del sistema. Afecta el rendimiento del enlazador y, por tanto, el tiempo de respuesta del programador mientras se desarrolla un programa. Si el formato se utiliza para ejecutables, el diseño también afecta el tiempo que tardan los programas en comenzar a ejecutarse y, por tanto, 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

Muchas de las primeras computadoras, o pequeñas microcomputadoras , solo admiten un formato de objeto absoluto. Los programas no son reubicables; deben ensamblarse o compilarse para ejecutarse en direcciones específicas predefinidas. El archivo no contiene información de reubicación o vinculación. Estos archivos pueden cargarse en la memoria de lectura/escritura o almacenarse en una memoria de solo lectura . Por ejemplo, el monitor Motorola 6800 MIKBUG contiene una rutina para leer un archivo de objeto absoluto ( formato SREC ) de una cinta de papel . [5] Los archivos COM de DOS son un ejemplo más reciente de archivos de objetos absolutos. [6]

Segmentación

La mayoría de los formatos de archivos de objetos están estructurados como secciones separadas de datos, y cada sección contiene un determinado tipo 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 la memoria . Cuando un cargador carga un programa en la memoria , el cargador asigna varias regiones de memoria al programa. Algunas de estas regiones corresponden a secciones del archivo objeto y, por lo tanto, normalmente se las conoce con los mismos nombres. Otros, como la pila, sólo existen en tiempo de ejecución. En algunos casos, la reubicación la realiza el cargador (o vinculador) para especificar las direcciones de memoria reales. Sin embargo, para muchos programas o arquitecturas, la reubicación no es necesaria, debido a que la maneja la unidad de administración de memoria o mediante un 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 formatos de archivos de objetos típicos: [7]

El vinculador puede combinar segmentos en diferentes archivos de objetos de acuerdo con las reglas especificadas cuando se definen los segmentos. Existen convenciones para segmentos compartidos entre archivos de objetos; por ejemplo, en DOS existen diferentes modelos de memoria que especifican los nombres de segmentos especiales y si se pueden combinar o no. [8]

El formato de datos de depuración de la información de depuración puede ser una parte integral del formato de archivo objeto, como en COFF , o un formato semiindependiente que puede usarse con varios formatos de objetos, como puñaladas o DWARF .

Ver también

Referencias

  1. ^ Wrubel, mariscal H. (1959). Introducción a la programación para computadoras digitales. Nueva York, Estados Unidos: McGraw-Hill . pag. 222 . Consultado el 31 de julio de 2020 .
  2. ^ Cargador y editor de vinculación del sistema operativo IBM (PDF) . Corporación IBM . 1973. pág. dieciséis . Consultado el 6 de agosto de 2012 .
  3. ^ "Binarios universales y binarios PowerPC de 32 y 64 bits". Referencia del formato de archivo OS X ABI Mach-O . Apple Inc. 2009-02-04 [2003]. Archivado desde el original el 4 de septiembre de 2014.
  4. ^ "FatELF: binarios universales para Linux" . Consultado el 2 de agosto de 2020 .
  5. ^ Astucias, Mike; Félix, André. ROM MIKBUG/MINIBUG MCM6830L7 (PDF) . Productos semiconductores de Motorola, Inc. Consultado el 31 de julio de 2020 .
  6. ^ Dios, Deepali A.; Godse, Atul P. (2008). Microprocesador (1 ed.). Pune, India: Publicaciones técnicas. págs. 3-15. ISBN 978-81-8431-355-0.
  7. ^ Mauerer, Wolfgang (2010). "Apéndice E. El formato binario ELF". Arquitectura profesional del kernel de Linux . John Wiley e hijos . pag. Apéndice E. ISBN 978-0-470-34343-2. Consultado el 1 de agosto de 2020 .
  8. ^ Irvine, Kip R. (1993). Lenguaje ensamblador para IBM-PC (2 ed.). Nueva York, Estados Unidos: Macmillan. ISBN 0-02-359651-1.

Otras lecturas