| ファイル名拡張子 | .omf、.obj |
|---|---|
| 開発者 | ツールインターフェース標準委員会 |
| フォーマットの種類 | オブジェクトファイル |
オブジェクトモジュール フォーマット (OMF) は、主にIntel 80x86マイクロプロセッサ上で実行することを目的としたソフトウェアに使用されるオブジェクト ファイル フォーマットです。 もともとは1975年から1977年頃にIntelが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 ビット コードや動的リンクなどの機能の追加により、レコード タイプは多種多様になっています。重要なレコード タイプは次のとおりです。
- COMENT - (88h) コメント。制御情報も含まれる場合があります。
- EXTDEF - (8Ch) 外部参照を定義する
- PUBDEF - (90h/91h) このモジュール内の外部シンボルを識別します
- SEGDEF - (98h/99h) セグメントを識別します
- GRPDEF - (9Ah) セグメントのグループを識別します。例: MS-DOS
DGROUP - FIXUPP - (9Ch/9Dh)修正または移転の記録
- LEDATA - (A0h/A1h) コードまたはデータセクションのテキストが含まれます
- COMDEF - (B0h) 初期化されていない共通データ
- COMDAT - (C2h/C3h) 初期化された共通データ
- MODEND - (8Ah/8Bh) モジュールの終了を示す
ファイルには、シンボル テーブルへのポインターなどのファイル オフセットを含むヘッダーがないため、リンカーはオブジェクト ファイルを完全に解析してすべての情報を抽出する必要があります。
OMF 形式では、1 つのセクションのデータは必ずしもファイル内の連続したバイトとして保存されるわけではなく、複数のレコードで表すことができます。ファイル形式仕様 (バージョン 1.1)では、1 KiB を超えるセクションではこれを実行する必要があるとされています。再配置情報(フィックスアップ) を含むレコードは、それが適用されるセクションのデータ レコードの直後に保存する必要があるため、セクション データと再配置情報はファイル内で「混在」します。
ファイル形式は、オブジェクト ファイル内の繰り返しデータ シーケンスを圧縮できる特別なレコード (LIDATA) を提供します。また、後続の実行可能ファイルのエントリ ポイントのシンボル名を 1 つのオブジェクト ファイルに格納することもできます。
このファイル形式はライブラリファイル形式 としても使用できます。
使用
ファイル形式はDOS、16ビットWindowsで最も重要なオブジェクトファイル形式です。16ビットおよび32ビットのOS/2。[14] [15]
OMF 形式の 32 ビット バージョンを使用するツールチェーンはほとんどありません。たとえば、Watcom Cツールチェーンでは、32 ビットのセグメント化されたメモリ レイアウトを使用するターゲット用のコードを生成できます。Iron Spring PL/Iでは、OS/2 32 ビットのフラット メモリ レイアウト用のコードを生成できます。
Embarcadero Delphiコンパイラは、C++ のファイルを生成するときにこの形式を使用しました。これは、 COFFobj形式のサポートと 64 ビット Windows ターゲットが導入された Delphi バージョン XE2 より前のバージョンでは、Object Pascal で記述されたプログラムまたはユニットにリンクできる唯一のオブジェクト ファイル形式でした。
参照
- 共通オブジェクト ファイル形式(COFF)
- 実行可能およびリンク可能な形式(ELF)
- a.アウト
- オブジェクトファイル
- オブジェクト モジュール フォーマット (VME) (ICL VME で使用される OMF)
- オブジェクト モジュール フォーマット (Apple) (ORCA / Apple IIGSで使用される OMF )
参考文献
- ^ MCS 80/85 Absolute Object File Formats (PDF) (技術仕様)。米国カリフォルニア州サンタクララ: Intel Corporation。1977年。製品番号 9800183B。2017年6月27日時点のオリジナル(PDF)からアーカイブ。(16ページ)
- ^ MCS 80/85 再配置可能オブジェクト モジュール形式(PDF) (技術仕様)。米国カリフォルニア州サンタクララ: Intel Corporation。1981年 3 月。製品番号 121747-001。A33S/381/S00 IP。2023年 11 月 25 日のオリジナルからアーカイブ(PDF) 。2023年 11 月 25 日閲覧。(42ページ)
- ^ abc Burgett, Kenneth "Ken" (2017-11-10). 「Intel ISIS オペレーティングシステムの開発 - Ken Burgett とのインタビュー」。2023-11-24 にオリジナルからアーカイブ。2023-11-25に取得。
私の親友である Bruce が、8080
および
今後の
8086用のオブジェクトモジュールフォーマット (OMF) の開発に携わりました。この作業は、
MS-DOS が
ほとんどまたはまったく変更せずに使用したため、何年も生き続けることになります[…] これは優れた作業であり、1985 年に
80386
32 ビットフラットアドレスモード
をサポートするように更新されました。
[…] OMF は、オブジェクト モジュールをまとめるリンカーと、
再配置可能なコードを
定義済みのエントリ ポイントを持つ固定メモリ イメージに処理するロケーターの設計に関する優れたロードマップを提供しました。これは、
ISIS がロード モジュールを処理する方法であったためです。ロケーターは、リンクされたモジュールを
EPROM
イメージのセットにマッピングできるようにも構築されており、これにより、
PROM バーナー
でプログラムできるようになりました
。
[1][2]
- ^ ab Necasek, Michal (2020-07-25) [2020-07-09]. 「OMF は何歳ですか?」. OS/2 ミュージアム. 2023-11-25 時点のオリジナルよりアーカイブ。2023-11-25閲覧。
- ^ 外部製品仕様、8086 オブジェクト モジュール フォーマット。Intel Corporation。1978年 12 月 19 日。
- ^ 「8086 再配置可能オブジェクト モジュール形式」(PDF)。バージョン 4.0。米国カリフォルニア州サンタクララ: Intel Corporation。1981年 11 月。製品番号 121748-001。ark:/13960/t07w7pz4b。2023年 11 月 25 日のオリジナルからアーカイブ(PDF) 。2020年 2 月 8 日閲覧。[3][4][5] (124ページ)
- ^ iAPX 286 システムビルダーユーザーズガイド(PDF)。米国カリフォルニア州サンタクララ:Intel Corporation 。1981年9月。注文番号121711-001。 2023年11月26日時点のオリジナルよりアーカイブ(PDF) 。 2023年11月26日閲覧。[6] (90ページ)
- ^ 「iAPX 286 オブジェクト モジュール フォーマット」。iAPX 286 オペレーティング システム ライター ガイド(PDF)。Intel Corporation。1983 年。pp. 11-10 – 11-11。注文番号 121960-001。2023年 11 月 26 日にオリジナルからアーカイブ(PDF) 。2023年 11 月 26 日に取得。 (251 ページ中 2 ページ)
- ^ 仕様 386 オブジェクト モジュール フォーマット。Intel Corporation。1991 [1990]。注文番号 482991-002。
- ^ 386 オブジェクト モジュール形式のシンプルなブートローダブル ファイル。Intel Corporation。1991 [1990]。注文番号 483164-001。
- ^ 「Tool Interface Standards (TIS) Relocatable Object Module Format (OMF) 仕様」(PDF)。バージョン 1.1。TIS 委員会 / Unix International。1995 年 5 月 [1993、1992]。2020 年 2 月 7 日のオリジナル(PDF)からアーカイブ。2020年 2 月 7 日に取得。[7][8] (87ページ)
- ^ 「Microsoft OBJ ファイル形式」。FileFormat.Info。2023年11 月 25 日時点のオリジナルよりアーカイブ。2023 年 11 月 26 日閲覧。
- ^ MCS-51 オブジェクト モジュール形式の外部製品仕様(PDF)。バージョン 5.0 リビジョン A。Intel Corporation。1982年 9 月 5 日。製品番号 9800183B。ドキュメント コントロール センター番号 481984。2023年 11 月 25 日にオリジナルからアーカイブ(PDF)されました。(24 ページ) (注: これは、Intel の RL51 2.0 および PL/M-51 1.0 に同梱されているバージョンです。1982 年 4 月 12 日付の以前のバージョン X207 もありました。)
- ^ IBM OS/2 16/32 ビット オブジェクト モジュール フォーマット (OMF) およびリニア実行可能モジュール フォーマット (LX) (PDF)。バージョン 8。米国フロリダ州ボカラトン: IBM Corporation。1994-06-30 [1991、1993]。2023-11-26にオリジナルからアーカイブ(PDF) 。2023-11-26に取得。(v+87ページ)
- ^ IBM OS/2 16/32 ビット オブジェクト モジュール フォーマット (OMF) およびリニア実行可能モジュール フォーマット (LX)。バージョン/リビジョン 10。米国フロリダ州ボカラトン: IBM Corporation。1996-10-09 [1991]。2023-11-26 時点のオリジナルよりアーカイブ。2023-11-26取得。[9] (6+95ページ)
さらに読む
- Levine, John R. (2000) [1999 年 10 月]。「第 3 章: オブジェクト ファイル」。リンカーとローダー。Morgan Kaufmann ソフトウェア エンジニアリングおよびプログラミング シリーズ (第 1 版)。米国カリフォルニア州サンフランシスコ: Morgan Kaufmann。ISBN 1-55860-496-0. OCLC 42413382. 2013年1月25日時点のオリジナルよりアーカイブ。2020年1月12日閲覧。コード: [10][11] 訂正: [12]
