El formato de módulo de objeto ( OMF ) es un formato de archivo de objeto utilizado 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 Intel 8080 / 8085 de 8 bits . [ 1 ] [ 2 ] [ 3 ] [ 4 ] Esta variante más tarde se conoció como OMF-80 .Como OMF-86 , fue adaptado 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 de Relocatable Object Module Format , [ 6 ] [ 3 ] [ 4 ] y es quizás 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 Tool Interface Standards Committee [ 11 ] y también fue extendido 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 archivo objeto constan de un conjunto de tablas, como la tabla de reubicación, que se almacenan en posiciones fijas dentro del archivo, como en el formato a.out , o a las que apunta la cabecera, como en 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 de módulo de objeto reubicable (ROM) fue diseñado para requerir una cantidad mínima de memoria al vincularse y consiste en una serie de registros que tienen el siguiente formato:
Existe una amplia variedad de tipos de registros debido a la consolidación de variantes OMF de varios proveedores y a la incorporación de características como el código de 32 bits y la vinculación dinámica. Estos son algunos 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 los 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 el texto de una sección de código o datos.
- COMDEF - (B0h) Datos comunes no inicializados
- COMDAT - (C2h/C3h) Datos comunes inicializados
- MODEND - (8Ah/8Bh) Indica el final del módulo
El archivo no contiene ninguna cabecera con desplazamientos de archivo, como por ejemplo un puntero a una tabla de símbolos; un enlazador debe analizar completamente el archivo objeto para extraer toda la información.
En el formato OMF, los datos de una sección no necesariamente se almacenan como bytes contiguos en el archivo, sino que pueden representarse mediante varios registros. La especificación del formato de archivo (versión 1.1) indica que esto debe hacerse para secciones de más de 1 KiB. Los registros que contienen información de reubicación (correcciones) deben almacenarse inmediatamente después de los registros de datos de la sección a la que se aplican, por lo que los datos de la sección y la información de reubicación se "mezclan" en el archivo.
El formato de archivo proporciona registros especiales (LIDATA) que permiten comprimir secuencias de datos repetitivas en un archivo objeto. También ofrece la posibilidad de almacenar el nombre del símbolo del punto de entrada del archivo ejecutable posterior en un mismo 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 objeto más importante en DOS, Windows de 16 bits ,y OS/2 de 16 bits 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 plataformas que utilizan diseños de memoria segmentada de 32 bits ; Iron Spring PL/I puede generar código para diseños de memoria plana de 32 bits de OS/2.
El compilador Embarcadero Delphi utilizaba este formato al generar objarchivos para C++. Era el único formato de archivos objeto que podía vincularse a un programa o unidad escritos en Object Pascal antes de la versión XE2 de Delphi, que introdujo la compatibilidad con el formato COFF , junto con la arquitectura de 64 bits para Windows.
Véase también
- Formato de archivo de objeto común (COFF)
- Formato ejecutable y enlazable (ELF)
- a.fuera
- Archivo objeto
- Formato de módulo de objeto (VME) (OMF tal como lo utiliza ICL VME)
- Formato de módulo de objeto (Apple) ( OMF utilizado por ORCA / Apple IIGS )
Referencias
- ↑ Formatos de archivo de objeto absoluto MCS 80/85 (PDF) (Especificación técnica). Santa Clara, California, EE. UU.: Intel Corporation . 1977. Número de producto 9800183B. Archivado del original (PDF) el 27 de junio de 2017.(16 páginas)
- ↑ Formatos de módulos de objetos reubicables MCS 80/85 (PDF) (Especificación técnica). Santa Clara, California, EE. UU.: Intel Corporation . Marzo de 1981. Número de producto 121747-001. IP A33S/381/S00. Archivado (PDF) del original el 25/11/2023 . Consultado el 25/11/2023 .(42 páginas)
- 1 2 3 Burgett, Kenneth "Ken" (10 de noviembre de 2017). "Desarrollo del sistema operativo Intel ISIS: una entrevista con Ken Burgett" . Archivado del original el 24 de noviembre de 2023. Recuperado el 25 de noviembre de 2023.
Un buen amigo mío, Bruce, consiguió el trabajo de desarrollar el formato de módulo de objeto (OMF) para el
8080
y el futuro
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 del
80386.
[...] El OMF nos dio una buena hoja de ruta para el diseño del enlazador, que unía los módulos de objeto, 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 los módulos de carga. El localizador también se diseñó para permitir la asignación de un módulo vinculado a un conjunto de imágenes
EPROM
, de modo que pudieran ser programadas por un
grabador de prom
.
- 1 2 Necasek, Michal (25-07-2020) [09-07-2020]. "¿Cuántos años tiene OMF?" . Museo OS/2 . Archivado del original el 25-11-2023 . Recuperado el 25-11-2023 .
- ↑ Especificación externa del producto , formatos del módulo objeto 8086. Intel Corporation . 19 de diciembre de 1978.
- ↑ "Formatos de módulos de objetos reubicables 8086" (PDF) . Versión 4.0. Santa Clara, California, EE. UU.: Intel Corporation . Noviembre de 1981. Número de producto 121748-001. ark:/13960/t07w7pz4b. Archivado (PDF) del original el 25/11/2023 . Consultado el 08/02/2020 .(124 páginas)
- ↑ Guía del usuario del sistema iAPX 286 (PDF) . Santa Clara, California, EE. UU.: Intel Corporation . Septiembre de 1981. Número de pedido 121711-001. Archivado (PDF) del original el 26 de noviembre de 2023. Consultado el 26 de noviembre de 2023 .(90 páginas)
- ↑ "Formato de módulo objeto iAPX 286". Guía del escritor de sistemas operativos iAPX 286 (PDF) . Intel Corporation . 1983. págs. 11-10 – 11-11 . Número de pedido 121960-001. Archivado (PDF) del original el 26/11/2023 . Consultado el 26/11/2023 . (2 de 251 páginas)
- ↑ Especificación 386 Formato de módulos de objetos . Intel Corporation . 1991 [1990]. Número de pedido 482991-002.
- ↑ Archivos de arranque simples en formato de módulos de objeto 386. Intel Corporation . 1991 [1990]. Número de pedido 483164-001.
- ↑ "Especificación del formato de módulo de objeto reubicable (OMF) de los estándares de interfaz de herramientas (TIS)" (PDF) . Versión 1.1. Comité TIS / Unix International . Mayo de 1995 [1993, 1992]. Archivado del original (PDF) el 7 de febrero de 2020. Consultado el 7 de febrero de 2020 .(87 páginas)
- ↑ "El formato de archivo OBJ de Microsoft" . FileFormat.Info . Archivado del original el 25/11/2023 . Consultado el 26/11/2023 .
- ↑Especificación externa del producto para el formato de módulo de objeto MCS-51 (PDF) . Versión 5.0 Revisión A. Intel Corporation . 5 de septiembre de 1982. Número de producto 9800183B. Número del Centro de Control de Documentos 481984. Archivado (PDF) del original el 25 de noviembre de 2023.(24 páginas) (Nota: Esta es la versión que venía con los procesadores Intel RL51 2.0 y PL/M-51 1.0. Existía una versión anterior, la X207, con fecha del 12 de abril de 1982).
- ↑ Formato de módulo de objeto (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) del original el 26 de noviembre de 2023. Consultado el 26 de noviembre de 2023 .(v+87 páginas)
- ↑ Formato de módulo de objeto (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 . 9 de octubre de 1996 [1991]. Archivado del original el 26 de noviembre de 2023. Consultado el 26 de noviembre de 2023 .(vi+95 páginas)
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 . 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:Errata:
- Formatos de archivos ejecutables
- formatos de archivos informáticos