Formaat verplaatsbare objectmodule - Relocatable Object Module Format
| 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
- Levine, John R. (2000) [oktober 1999]. "Hoofdstuk 3: Objectbestanden" . Linkers en laders . De Morgan Kaufmann-serie in Software Engineering en Programmeren (1 red.). San Francisco, VS: Morgan Kaufmann . ISBN 1-55860-496-0. OCLC 42413382 . ISBN 978-1-55860-496-4 . Gearchiveerd van het origineel op 25-01-2013 . Ontvangen 2020-01-12 .Code: [1] [2] Fout: [3]