Formaat verplaatsbare objectmodule - Relocatable Object Module Format

Formaat verplaatsbare objectmodule
Bestandsnaam extensie
.obj
Ontwikkeld door Tool Interface Standards Committee
Type formaat Objectbestand

De verplaatsbare Object Module Format (OMF) is een file object formaat vooral gebruikt voor software bestemd is om te draaien op Intel 80x86 microprocessors . Versie 4.0 werd in 1981 door Intel uitgebracht onder de naam Object Module Format en is bij DOS- gebruikers misschien het best bekend als een .OBJ-bestand . Het is sindsdien gestandaardiseerd door de Tool Interface Standards Committee .

Bestandsformaat

Veel bestandsindelingen voor objecten bestaan ​​uit een reeks tabellen, zoals de verplaatsingstabel, die ofwel op vaste posities in het bestand zijn opgeslagen, zoals het a.out- formaat, of waarnaar wordt verwezen door de koptekst, zoals het ELF- formaat. De "secties", code, gegevensgebied, enz., worden opgeslagen als aaneengesloten gebieden van bytes binnen dergelijke bestanden.

Het formaat van de verplaatsbare objectmodule is echter ontworpen om minimaal geheugen te vereisen bij het koppelen en bestaat uit een reeks records met het volgende formaat:

Maat Inhoud
1 byte Recordtype, bijvoorbeeld verhuisinformatie
2 bytes Gegevenslengte ( N +1)
N bytes Gegevens (varieert afhankelijk van het recordtype)
1 byte Controlesom of 0

Er is een grote verscheidenheid aan recordtypen vanwege de consolidatie van OMF-varianten van verschillende leveranciers en vanwege het toevoegen van functies als 32-bits code en dynamisch koppelen. Dit zijn belangrijke recordtypen:

  • OPMERKING - (88h) Opmerking, die ook controle-informatie kan bevatten.
  • EXTDEF - (8Ch) Definieert externe referenties
  • PUBDEF - (90h/91h) Identificeert externe symbolen in deze module
  • SEGDEF - (98h/99h) Identificeert segmenten
  • GRPDEF - (9Ah) Identificeert groepen segmenten, bijvoorbeeld MS-DOS DGROUP
  • FIXUPP - (9Ch / 9DH) Fixup of verhuizing verslagen
  • LEDATA - (A0h/A1h) Bevat tekst van een code of datasectie
  • COMDEF - (B0h) Niet-geïnitialiseerde gemeenschappelijke gegevens
  • COMDAT - (C2h/C3h) Geïnitialiseerde algemene gegevens
  • MODEND - (8Ah/8Bh) Geeft het einde van de module aan

Er is geen header met bestandsoffsets, zoals een aanwijzer naar een symbooltabel, in het bestand; een linker moet het objectbestand volledig ontleden om alle informatie te extraheren.

In het OMF-formaat worden de gegevens van één sectie niet noodzakelijkerwijs opgeslagen als aaneengesloten bytes in het bestand, maar kunnen ze worden weergegeven door meerdere records. De bestandsformaatspecificatie (versie 1.1) zegt dat dit moet gebeuren voor secties groter dan 1 KiB. Records met verhuizingsinformatie (fixups) moet onmiddellijk worden opgeslagen volgens de gegevensbestanden van de sectie ze van toepassing zijn, zodat de sectie gegevens en de verhuizing informatie "gemengde" in het bestand.

Het bestandsformaat biedt speciale records (LIDATA) die compressie van herhalende gegevensreeksen in een objectbestand mogelijk maken. Het biedt ook de mogelijkheid om de symboolnaam van het ingangspunt van het latere uitvoerbare bestand in één objectbestand op te slaan.

Het bestandsformaat kan ook worden gebruikt als bibliotheekbestandsformaat .

Gebruik maken van

Het bestandsformaat is het belangrijkste objectbestandsformaat onder DOS, 16-bits Windows en 16-bits en 32-bits OS/2 .

Weinig toolchains gebruiken de 32-bits versie van het OMF-formaat. Met de toolchain van Watcom C kan bijvoorbeeld code worden gegenereerd voor doelen die 32-bits gesegmenteerde geheugenlay-outs gebruiken; Iron Spring PL/I kan code genereren voor OS/2 32-bits platte geheugenlay-outs.

De Embarcadero Delphi- compiler gebruikte dit formaat bij het genereren van objbestanden voor C++. Het was het enige formaat van objectbestanden dat kon worden gekoppeld aan een programma of eenheid die was geschreven in Object Pascal vóór versie XE2 van Delphi, die ondersteuning van het COFF- formaat introduceerde , samen met 64-bits Windows-doel.

Zie ook

Referenties

Verder lezen