Formato de archivo de objeto
El formato de módulo de objeto (OMF) es un formato de archivo de objeto que se utiliza principalmente para software destinado a ejecutarse en microprocesadores Intel 80x86 . Fue desarrollado originalmente por Intel alrededor de 1975-1977 para ISIS-II , dirigido a los procesadores 8080/8085 de 8 bits . [1] [2] [3] [4] Esta variante más tarde se conoció como OMF-80 .Como OMF-86 se adaptó al procesador 8086 de 16 bits en 1978. [5]
La versión 4.0 de OMF para la familia 8086 se lanzó en 1981 con el nombre Relocatable Object Module Format , [6] [3] [4] y quizás sea más conocida por los usuarios de DOS como un archivo .OBJ .Las versiones para los procesadores 80286 ( OMF-286 ) [7] [8] y 80386 de 32 bits ( OMF-386 ) [9] [10] [3] se introdujeron en 1981 y 1985, respectivamente.Desde entonces, ha sido estandarizado por el Comité de Estándares de Interfaz de Herramientas [11] y también fue ampliado por Microsoft [12] e IBM ( IBM-OMF ). Intel también adaptó el formato al microcontrolador 8051 ( OMF-51 [13] y AOMF ).
Formato de archivo
Muchos formatos de archivos de objetos constan de un conjunto de tablas, como la tabla de reubicación, que se almacenan en posiciones fijas en el archivo, como el formato a.out , o a las que apunta el encabezado, como el formato ELF . Las "secciones", código, área de datos, etc., se almacenan como áreas contiguas de bytes dentro de dichos archivos.
Sin embargo, el formato del módulo de objetos reubicables fue diseñado para requerir una memoria mínima al vincularse y consta de una serie de registros que tienen el siguiente formato:
Existe una amplia variedad de tipos de registros debido a la consolidación de variantes de OMF de varios proveedores y a la adición de características como código de 32 bits y enlaces dinámicos. Estos son tipos de registros importantes:
- COMENTARIO - (88h) Comentario, que también puede contener información de control.
- EXTDEF - (8Ch) Define referencias externas
- PUBDEF - (90h/91h) Identifica símbolos externos en este módulo
- SEGDEF - (98h/99h) Identifica segmentos
- GRPDEF - (9Ah) Identifica grupos de segmentos, por ejemplo MS-DOS
DGROUP
- FIXUPP - (9Ch/9Dh) Registros de reparación o reubicación
- LEDATA - (A0h/A1h) Contiene texto de un código o sección de datos
- COMDEF - (B0h) Datos comunes no inicializados
- COMDAT - (C2h/C3h) Datos comunes inicializados
- MODEND - (8Ah/8Bh) Indica el final del módulo
No hay ningún encabezado que contenga desplazamientos de archivos, como un puntero a una tabla de símbolos, en el archivo; un vinculador debe analizar completamente el archivo objeto para extraer toda la información.
En el formato OMF, los datos de una sección no se almacenan necesariamente como bytes contiguos en el archivo, sino que se pueden representar mediante varios registros. La especificación de formato de archivo (versión 1.1) dice que esto debe hacerse para secciones de más de 1 KiB. Los registros que contienen información de reubicación (reparaciones) deben almacenarse inmediatamente después de los registros de datos de la sección a la que se aplican, de modo que los datos de la sección y la información de reubicación se "mezclen" en el archivo.
El formato de archivo proporciona registros especiales (LIDATA) que permiten la compresión de secuencias de datos repetidas en un archivo objeto. También proporciona la posibilidad de almacenar el nombre del símbolo del punto de entrada del archivo ejecutable posterior en un archivo objeto.
El formato de archivo también se puede utilizar como formato de archivo de biblioteca .
Usar
El formato de archivo es el formato de archivo de objeto más importante en DOS, Windows de 16 bits .y OS/2 de 16 y 32 bits . [14] [15]
Pocas cadenas de herramientas utilizan la versión de 32 bits del formato OMF. Por ejemplo, la cadena de herramientas Watcom C permite generar código para objetivos que utilizan diseños de memoria segmentada de 32 bits ; Iron Spring PL/I puede generar código para diseños de memoria plana OS/2 de 32 bits.
El compilador Embarcadero Delphi utilizó este formato al generar obj
archivos para C++. Era el único formato de archivos objeto que podía vincularse a un programa o unidad escrita en Object Pascal antes de la versión XE2 de Delphi, que introdujo soporte para el formato COFF , junto con el objetivo de Windows de 64 bits.
Ver también
Referencias
- ^ Formatos de archivo de objetos absolutos MCS 80/85 (PDF) (especificación técnica). Santa Clara, California, Estados Unidos: Intel Corporation . 1977. Número de producto 9800183B. Archivado desde el original (PDF) el 27 de junio de 2017.(16 páginas)
- ^ Formatos de módulo de objetos reubicables MCS 80/85 (PDF) (especificación técnica). Santa Clara, California, Estados Unidos: Intel Corporation . Marzo de 1981. Número de producto 121747-001. A33S/381/S00IP. Archivado (PDF) desde el original el 25 de noviembre de 2023 . Consultado el 25 de noviembre de 2023 .(42 páginas)
- ^ abc Burgett, Kenneth "Ken" (10 de noviembre de 2017). "Desarrollo del sistema operativo Intel ISIS: una entrevista con Ken Burgett". Archivado desde el original el 24 de noviembre de 2023 . Consultado el 25 de noviembre de 2023 .
Un buen amigo mío, Bruce, consiguió el trabajo de desarrollar el formato de módulo de objetos (OMF) para el
8080
y el próximo
8086
. Este trabajo perduraría durante años, ya que
MS-DOS
lo usó con pocas o ninguna modificación […] Fue un buen trabajo y se actualizó en 1985 para admitir el
modo de dirección plana de 32 bits
80386
. […] La OMF nos dio una buena hoja de ruta para el diseño del enlazador, que unía los módulos de objetos, y el localizador, que procesaba el
código reubicable
en una imagen de memoria fija, con un punto de entrada definido, ya que así era como
ISIS
manejaba cargar módulos. El localizador también se construyó para permitir el mapeo de un módulo vinculado en un conjunto de imágenes
EPROM
, de modo que pudieran programarse mediante un
quemador de graduación
.
[1][2] - ^ ab Necasek, Michal (25 de julio de 2020) [9 de julio de 2020]. "¿Qué edad tiene OMF?". Museo OS/2 . Archivado desde el original el 25 de noviembre de 2023 . Consultado el 25 de noviembre de 2023 .
- ^ Especificación de producto externa, formatos de módulo de objetos 8086 . Corporación Intel . 1978-12-19.
- ^ "Formatos de módulo de objetos reubicables 8086" (PDF) . Versión 4.0. Santa Clara, California, Estados Unidos: Intel Corporation . Noviembre de 1981. Número de producto 121748-001. arca:/13960/t07w7pz4b. Archivado (PDF) desde el original el 25 de noviembre de 2023 . Consultado el 8 de febrero de 2020 .[3][4][5] (124 páginas)
- ^ Guía del usuario del creador del sistema iAPX 286 (PDF) . Santa Clara, California, Estados Unidos: Intel Corporation . Septiembre de 1981. Número de pedido 121711-001. Archivado (PDF) desde el original el 26 de noviembre de 2023 . Consultado el 26 de noviembre de 2023 .[6] (90 páginas)
- ^ "Formato de módulo de objetos iAPX 286". Guía del escritor de sistemas operativos iAPX 286 (PDF) . Corporación Intel . 1983. págs. 11-10-11-11. Número de pedido 121960-001. Archivado (PDF) desde el original el 26 de noviembre de 2023 . Consultado el 26 de noviembre de 2023 .(2 de 251 páginas)
- ^ Especificación 386 Formato de módulos de objetos . Corporación Intel . 1991 [1990]. Número de pedido 482991-002.
- ^ Archivos de arranque simples en formato de 386 módulos de objetos . Corporación Intel . 1991 [1990]. Número de pedido 483164-001.
- ^ "Especificación del formato de módulo de objetos reubicables (OMF) de los estándares de interfaz de herramientas (TIS)" (PDF) . Versión 1.1. Comité TIS / Unix Internacional . Mayo de 1995 [1993, 1992]. Archivado desde el original (PDF) el 7 de febrero de 2020 . Consultado el 7 de febrero de 2020 .[7][8] (87 páginas)
- ^ "El formato de archivo OBJ de Microsoft". Formatodearchivo.Info . Archivado desde el original el 25 de noviembre de 2023 . Consultado el 26 de noviembre de 2023 .
- ^ Especificación de producto externo para el formato del módulo de objetos MCS-51 (PDF) . Versión 5.0 Revisión A. Intel Corporation . 1982-09-05. Número de producto 9800183B. Centro de control de documentos número 481984. Archivado (PDF) desde el original el 25/11/2023.(24 páginas) (NB. Esta es la versión enviada con Intel RL51 2.0 y PL/M-51 1.0. Había una versión anterior X207 con fecha del 12 de abril de 1982).
- ^ Formato de módulo de objetos (OMF) y formato de módulo ejecutable lineal (LX) de IBM OS/2 de 16/32 bits (PDF) . Versión 8. Boca Raton, Florida, EE.UU.: IBM Corporation . 30 de junio de 1994 [1991, 1993]. Archivado (PDF) desde el original el 26 de noviembre de 2023 . Consultado el 26 de noviembre de 2023 .(v+87 páginas)
- ^ Formato de módulo de objetos (OMF) y formato de módulo ejecutable lineal (LX) de IBM OS/2 de 16/32 bits. Versión/Revisión 10. Boca Raton, Florida, EE.UU.: IBM Corporation . 1996-10-09 [1991]. Archivado desde el original el 26 de noviembre de 2023 . Consultado el 26 de noviembre de 2023 .[9] (vi+95 páginas)
Otras lecturas
- Levine, John R. (2000) [octubre de 1999]. "Capítulo 3: Archivos objeto". Enlazadores y cargadores . La serie Morgan Kaufmann sobre programación e ingeniería de software (1 ed.). San Francisco, California, Estados Unidos: Morgan Kaufmann . ISBN 1-55860-496-0. OCLC 42413382. Archivado desde el original el 25 de enero de 2013 . Consultado el 12 de enero de 2020 .Código: [10][11] Fe de erratas: [12]