Format del mòdul d'objectes reubicables
Tipus | Object file |
---|---|
Extensió | .omf , .obj |
Desenvolupador | Tool Interface Standards Committee |
Més informació | |
Wiki del format de fitxer | Relocatable_Object_Module_Format |
L'Object Module Format (OMF) és un format de fitxer d'objecte que s'utilitza principalment per al programari destinat a funcionar amb microprocessadors Intel 80x86. Va ser desenvolupat originalment per Intel entre 1975 i 1977 per a ISIS-II, dirigit als processadors 8080/8085 de 8 bits. Aquesta variant més tard es va conèixer com a OMF-80. Com a OMF-86 es va adaptar al processador 8086 de 16 bits el 1978. La versió 4.0 per a la família 8086 es va publicar el 1981 amb el nom de Relocatable Object Module Format, i potser és més coneguda pels usuaris de DOS com a. Fitxer OBJ. Les versions per als processadors 80286 (OMF-286) i els processadors 80386 de 32 bits (OMF-386 ) es van introduir el 1981 i el 1985, respectivament. Des de llavors, ha estat estandarditzat pel Comitè d'Estàndards de la Interfície d'Eina i també va ser ampliat per Microsoft i IBM IBM-OMF). Intel també va adaptar el format al microcontrolador 8051 (OMF-51 i AOMF).[1][2]
Format de fitxer
[modifica]Molts formats de fitxer d'objectes consisteixen en un conjunt de taules, com ara la taula de reubicació, que s'emmagatzemen en posicions fixes del fitxer, com el format a.out, o s'apunten a la capçalera, com el format ELF. Les "seccions", el codi, l'àrea de dades, etc., s'emmagatzemen com a àrees contigües de bytes dins d'aquests fitxers.[3]
El format del mòdul d'objectes reubicables, però, va ser dissenyat per requerir una memòria mínima quan s'enllaça i consta d'una sèrie de registres que tenen el format següent:
Mida | Continguts |
---|---|
1 byte | Tipus de registre, per exemple informació de trasllat |
2 bytes | Longitud de les dades (N +1) |
N bytes | Dades (varia segons el tipus de registre) |
1 byte | Suma de control o 0 |
Hi ha una gran varietat de tipus de registres a causa de la consolidació de variants OMF de diversos proveïdors i per l'addició de funcions com el codi de 32 bits i l'enllaç dinàmic. Aquests són els tipus de registre importants:
- COMENTARI - (88h) Comentari, que també pot contenir informació de control.
- EXTDEF - (8Ch) Defineix referències externes
- PUBDEF - (90h/91h) Identifica símbols externs en aquest mòdul
- SEGDEF - (98h/99h) Identifica segments
- GRPDEF - (9Ah) Identifica grups de segments, per exemple MS-DOS
DGROUP
- FIXUPP - (9Ch/9Dh) Expedients d'arreglament o reubicació
- LEDATA - (A0h/A1h) Conté text d'un codi o secció de dades
- COMDEF - (B0h) Dades comunes no inicialitzades
- COMDAT - (C2h/C3h) Dades comunes inicialitzades
- MODEND - (8Ah/8Bh) Indica el final del mòdul
No hi ha cap capçalera que contingui desplaçaments de fitxer, com ara un punter a una taula de símbols, al fitxer; un enllaçador ha d'analitzar completament el fitxer objecte per extreure tota la informació.
En el format OMF, les dades d'una secció no s'emmagatzemen necessàriament com a bytes contigus al fitxer, sinó que es poden representar amb diversos registres. L'especificació del format de fitxer (versió 1.1) diu que això s'ha de fer per a seccions més grans que 1 KiB. Els registres que contenen informació de reubicació (correccions) s'han d'emmagatzemar immediatament després dels registres de dades de la secció a la qual s'apliquen, de manera que les dades de la secció i la informació de reubicació es "barregen" al fitxer.[4]
Ús
[modifica]El format de fitxer és el format de fitxer objecte més important sota DOS, Windows de 16 bits i OS/2 de 16 i 32 bits.
Poques cadenes d'eines utilitzen la versió de 32 bits del format OMF. Per exemple, la cadena d'eines Watcom C permet generar codi per a objectius que utilitzen dissenys de memòria segmentada de 32 bits; Iron Spring PL/I pot generar codi per a dissenys de memòria plana OS/2 de 32 bits.
El compilador Embarcadero Delphi va utilitzar aquest format quan va generar fitxers obj
per a C++. Va ser l'únic format de fitxers objecte que es podia enllaçar a un programa o unitat escrit en Object Pascal abans de la versió XE2 de Delphi, que va introduir el suport del format COFF, juntament amb l'objectiu de Windows de 64 bits.
Referències
[modifica]- ↑ «What is a 8086 relocatable?» (en anglès). [Consulta: 8 desembre 2023].
- ↑ «OMF-51 Object Module Format | Documentation» (en anglès). [Consulta: 8 desembre 2023].
- ↑ «Tool Interface Standard (TIS) Portable Formats Specification» (en anglès). [Consulta: 8 desembre 2023].
- ↑ Yumpu.com. «Relocatable» (en anglès). [Consulta: 8 desembre 2023].