Modulformat für verschiebbare Objekte - Relocatable Object Module Format

Modulformat für verschiebbare Objekte
Dateinamenerweiterung
.obj
Entwickelt von Normenausschuss Werkzeugschnittstellen
Formattyp Objektdatei

Das Relocatable Object Module Format (OMF) ist ein Objektdateiformat , das hauptsächlich für Software verwendet wird, die auf Intel 80x86- Mikroprozessoren ausgeführt werden soll . Version 4.0 wurde 1981 von Intel unter dem Namen Object Module Format veröffentlicht und ist DOS- Benutzern vielleicht am besten als .OBJ-Datei bekannt . Es wurde seitdem vom Tool Interface Standards Committee standardisiert .

Datei Format

Viele Objektdateiformate bestehen aus einer Reihe von Tabellen, wie beispielsweise der Relocation-Tabelle, die entweder an festen Positionen in der Datei gespeichert sind, wie im a.out- Format, oder auf die im Header wie im ELF- Format verwiesen wird . Die "Abschnitte", der Code, der Datenbereich usw. werden als zusammenhängende Bereiche von Bytes innerhalb solcher Dateien gespeichert.

Das Relocatable Object Module Format wurde jedoch entwickelt, um beim Verknüpfen minimalen Speicher zu benötigen, und besteht aus einer Reihe von Datensätzen mit folgendem Format:

Größe Inhalt
1 Byte Datensatztyp, zum Beispiel Umzugsinformationen
2 Byte Datenlänge ( N +1)
N Byte Daten (variiert je nach Datensatztyp)
1 Byte Prüfsumme oder 0

Aufgrund der Konsolidierung von OMF-Varianten verschiedener Anbieter und des Hinzufügens von Funktionen wie 32-Bit-Code und dynamischer Verknüpfung gibt es eine Vielzahl von Datensatztypen. Dies sind wichtige Datensatztypen:

  • KOMMENTAR - (88h) Kommentar, der auch Kontrollinformationen enthalten kann.
  • EXTDEF - (8Ch) Definiert externe Referenzen
  • PUBDEF - (90h/91h) Identifiziert externe Symbole in diesem Modul
  • SEGDEF - (98h/99h) Identifiziert Segmente
  • GRPDEF - (9Ah) Identifiziert Gruppen von Segmenten, zum Beispiel MS-DOS DGROUP
  • FIXUPP - (9Ch/9Dh) Fixup- oder Umzugsaufzeichnungen
  • LEDATA - (A0h/A1h) Enthält Text eines Code- oder Datenabschnitts
  • COMDEF - (B0h) Nicht initialisierte gemeinsame Daten
  • COMDAT - (C2h/C3h) Initialisierte gemeinsame Daten
  • MODEND - (8Ah/8Bh) Zeigt das Ende des Moduls an

In der Datei gibt es keinen Header, der Datei-Offsets enthält, wie z. B. einen Zeiger auf eine Symboltabelle; ein Linker muss die Objektdatei vollständig analysieren, um alle Informationen zu extrahieren.

Im OMF-Format werden die Daten eines Abschnitts nicht unbedingt als zusammenhängende Bytes in der Datei gespeichert, sondern können durch mehrere Datensätze dargestellt werden. Die Dateiformat - Spezifikation (Version 1.1) sagt , dass dies muss für die Abschnitte größer als 1 KiB erfolgen. Datensätze mit Umzugsinformationen (Fixups) müssen unmittelbar nach den Datensätzen des Abschnitts, für den sie gelten, gespeichert werden, sodass die Abschnittsdaten und die Umzugsinformationen in der Datei „vermischt“ werden.

Das Dateiformat stellt spezielle Datensätze (LIDATA) bereit, die eine Komprimierung sich wiederholender Datensequenzen in einer Objektdatei ermöglichen. Es bietet auch die Möglichkeit, den Symbolnamen des Einstiegspunkts der später ausführbaren Datei in einer Objektdatei zu speichern.

Das Dateiformat kann auch als Bibliotheksdateiformat verwendet werden.

Verwenden

Das Dateiformat ist das wichtigste Objektdateiformat unter DOS, 16-Bit Windows und 16-Bit und 32-Bit OS/2 .

Nur wenige Toolchains verwenden die 32-Bit-Version des OMF-Formats. Die Watcom C- Toolchain ermöglicht beispielsweise die Generierung von Code für Ziele, die segmentierte 32-Bit- Speicherlayouts verwenden; Iron Spring PL/I kann Code für OS/2-32-Bit-Flachspeicher-Layouts generieren.

Der Embarcadero Delphi- Compiler hat dieses Format beim Generieren von objDateien für C++ verwendet. Es war das einzige Format von Objektdateien, das mit einem Programm oder einer Unit verknüpft werden konnte, die in Object Pascal vor der Version XE2 von Delphi geschrieben wurde, die die Unterstützung des COFF- Formats zusammen mit 64-Bit-Windows- Zielen einführte .

Siehe auch

Verweise

Weiterlesen