オブジェクトモジュールフォーマット(OMF)は、主にIntel 80x86マイクロプロセッサ上で動作することを目的としたソフトウェアに使用されるオブジェクトファイルフォーマットです。これは元々 、 1975年から1977年頃にインテルがISIS-II向けに開発したもので、8ビットのインテル8080/8085プロセッサをターゲットとしていました。[ 1 ] [ 2 ] [ 3 ] [ 4 ]このバリアントは後にOMF-80として知られるようになりました。OMF-86として、 1978年に16ビット8086プロセッサに適合された。 [ 5 ]
8086ファミリ用のOMFバージョン4.0は、1981年にRelocatable Object Module Formatという名前でリリースされ、[ 6 ] [ 3 ] [ 4 ] 、 DOSユーザーには.OBJファイルとして最もよく知られている。80286 ( OMF-286 ) [ 7 ] [ 8 ]および 32 ビット80386プロセッサ ( OMF-386 ) [ 9 ] [ 10 ] [ 3 ]用のバージョンは、それぞれ 1981 年と 1985 年に導入されました。その後、ツールインターフェース標準委員会[ 11 ]によって標準化され、マイクロソフト[ 12 ]とIBM(IBM-OMF )によっても拡張されました。インテルもこのフォーマットを8051マイクロコントローラ(OMF-51 [ 13 ]とAOMF )に適合させました。
多くのオブジェクトファイル形式は、再配置テーブルなどの一連のテーブルで構成されており、これらのテーブルは、a.out形式のようにファイル内の固定位置に格納される場合と、 ELF形式のようにヘッダーによって参照される場合があります。「セクション」、コード、データ領域などは、これらのファイル内で連続したバイト領域として格納されます。
しかし、再配置可能オブジェクトモジュール形式は、リンク時に最小限のメモリしか必要としないように設計されており、次の形式のレコードの連続で構成されています。
複数のベンダーのOMFバリアントが統合され、32ビットコードや動的リンクなどの機能が追加されたため、レコードタイプは非常に多様化しています。以下は重要なレコードタイプです。
DGROUPファイル内には、シンボルテーブルへのポインタなどのファイルオフセットを含むヘッダーは存在しないため、リンカはオブジェクトファイルを完全に解析してすべての情報を抽出する必要がある。
OMFフォーマットでは、1つのセクションのデータは必ずしも連続したバイト列としてファイルに格納されるわけではなく、複数のレコードで表現されることがあります。ファイルフォーマット仕様(バージョン1.1)では、1 KiBを超えるセクションについてはこの処理が必要であると規定されています。再配置情報 (修正)を含むレコードは、それが適用されるセクションのデータレコードの直後に格納する必要があるため、セクションデータと再配置情報はファイル内で「混在」することになります。
このファイル形式は、オブジェクトファイル内の繰り返しデータシーケンスを圧縮できる特殊レコード(LIDATA)を提供します。また、後続の実行可能ファイルのエントリポイントのシンボル名を1つのオブジェクトファイルに格納することも可能です。
このファイル形式は、ライブラリファイル形式としても使用できます。
ファイル形式は、DOS、16ビットWindows、16ビットおよび32ビットOS/2。[ 14 ] [ 15 ]
32ビット版のOMFフォーマットを使用するツールチェーンは少ない。例えば、Watcom Cツールチェーンは32ビットのセグメントメモリレイアウトを使用するターゲット向けのコードを生成できる。Iron Spring PL/IはOS/2の32ビットフラットメモリレイアウト向けのコードを生成できる。
Embarcadero Delphiコンパイラは、C++用のファイルを生成する際にこのフォーマットを使用していました。DelphiのバージョンXE2でCOFFobjフォーマットと64ビットWindowsターゲットのサポートが導入される以前は、Object Pascalで記述されたプログラムやユニットにリンクできるオブジェクトファイルのフォーマットは、このフォーマットのみでした。
私の親友である Bruce が、
8080
および今後登場する
8086
用のオブジェクト モジュール フォーマット (OMF) の開発を担当することになりました。この作業は、
MS-DOS がほとんどまたは全く変更せずに使用していたため、長年にわたって活用されました。[…] これは優れた作業であり、1985 年に
80386 の
32 ビット フラット アドレス モードをサポートするように更新されました
。 […] OMFは、オブジェクトモジュールを結合するリンカーと、
再配置可能なコード
を定義されたエントリポイントを持つ固定メモリイメージに
処理するロケーターの設計に関する優れたロードマップを提供してくれました。これは、
ISISがロードモジュールを処理する方法と同じでした。ロケーターはまた、リンクされたモジュールを
EPROM
イメージのセットにマッピングできるように構築されており、それらを
PROMバーナー
でプログラムできるようにしました
。
{{cite book}}: CS1 maint: 非推奨のアーカイブサービス (リンク)コード: [リンク削除済み]訂正: