COFFとは? わかりやすく解説

COFF

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/02/01 08:00 UTC 版)

ナビゲーションに移動 検索に移動
COFF
拡張子 なし, .o
開発者 AT&T
種別 バイナリ, 実行可能, オブジェクト, 共有ライブラリ
拡張 XCOFF, ECOFF, Portable Executable, Executable and Linkable Format

COFF (Common Object File Format) はUnixシステムで用いられる実行ファイルオブジェクトファイル共有ライブラリファイルフォーマット仕様である。Unix System V で導入され、SVR4で導入されたELFによって広く置き換えられる前に、XCOFFECOFFなどの拡張仕様の基礎を形作った。COFFとその派生種はその後もUnixライクシステムやMicrosoft Windows上で使われ続けている。

歴史

元々のUnixのオブジェクトファイルフォーマットa.outは非常に単純な設計であり、たとえば シンボリックデバッグ情報や共有ライブラリなどを十分にサポートすることができなかった。AT&Tの内外でUnixライクシステムの開発が進むにつれ、これらの問題への別の解決策や、異なる問題が生じ始めた。

COFFはAT&TのVAX以外の32bitプラットフォーム向けのUNIX System Vで導入された。既存のAT&Tのa.outフォーマットに対する改善点として、COFFは元からシンボリックデバッグ情報や共有ライブラリ、拡張の機構をサポートしていた。

しかし、COFFはa.outの改善版であると同時に、その設計にも制限があった。セクションの最大数や、セクション名の長さ、シンボリックデバッグ情報をC++のような新しい言語でサポートすることができない、などの制約があった。SVR4のリリースとともに、AT&TはCOFFをELFで置き換えた。IBMAIXでXCOFFフォーマットを使用し、DECSGIなどの会社はECOFFを使用した。それ以外のシステムは互換性のない方法でそれぞれ実行ファイルのフォーマットを拡張してこれらの問題点を克服した。

拡張されたCOFFはいくつかのUnixライクなプラットフォームで使用され続け、まずは組み込みシステムにおいて、そしておそらく今日でもっとも広く普及したCOFFの用途はMicrosoftPortable Executable (PE) フォーマットである。

Windows NTのために開発されたPEフォーマット(PE/COFF と表記されることもある)[1]は、オブジェクトファイルに COFF ヘッダを使用し、実行ファイル内のPEヘッダのコンポーネントとして使用する。[2]

特徴

COFFのa.outに対する主要な改善点はオブジェクトファイル内に名前のついた複数のセクションを導入したことであった。オブジェクトファイルはそれぞれ異なる数と種類のセクションを持つことができた。

シンボリックデバッグ情報

COFFのシンボリックデバッグ情報は、プログラムの関数と変数の(文字による)シンボル名称と、実行のトレースやブレークポイントの設定に用いられる行番号情報からなっている。a.outは元々シンボリックデバッグ情報をサポートしていないが、スタブのような機構を用いることでこの欠点をある程度は克服することができた。

シンボル名称はCOFFのシンボルテーブルに格納される。シンボルテーブルの各エントリーには名前、記憶クラス、型、値およびセクション番号が含まれる。短い名前(8文字以下)はシンボルテーブルに直接格納され、長い名前はCOFFオブジェクトの末端にある文字列テーブルに対するオフセットとして格納される。

記憶クラスは外部変数(C_EXT)、自動(スタック)変数(C_AUTO)、レジスタ変数(C_REG)、関数(C_FCN)などのシンボルが表現する型の実体を示す。シンボルの種類はシンボルの実体の値を説明するもので、すべてのC言語のデータ型を含んでいる。

適切なオプションとともにコンパイルされた場合、COFFオブジェクトファイルはオブジェクトファイルのテキストセクションのとりうる各ブレークポイントの行番号情報を格納する。行番号情報は二つの形態をとる。一番目の形態では、コード内のとりうる各ブレークポイントについて、行番号のエントリーがアドレスと対応する行番号を格納する。二番目の形態では、関数の開始を示すシンボルテーブルのエントリーを識別し、関数の名前でブレークポイントを有効にする。

相対仮想アドレス

COFFファイルが生成される際には、通常ファイルがメモリのどこにロードされるかは不明である。ファイルの最初のバイトがロードされた仮想アドレスは、イメージベースアドレスと呼ばれる。ファイルの残りは必ずしも連続した領域にロードされる必要はなく、異なるセクションにロードされる。

相対仮想アドレス(RVA)は、標準的な仮想アドレスと混同してはならない。相対仮想アドレスはメモリにロードされたオブジェクトの仮想アドレスから、ファイルイメージのベースアドレスを引いたものである。仮にファイルが文字通りディスクからメモリに(そのまま)割り当てられると、RVAはファイルについてのオフセットと同一になるが、実際にはそのようなことはめったにない。

RVAという用語はイメージファイル内のオブジェクトについてのみ用いられる。メモリにロードされると、イメージのベースアドレスが加算され、通常の仮想アドレスとなって使用される。

脚注

  1. ^ [1]
  2. ^ Microsoft Corporation 2006b

参考文献




固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「COFF」の関連用語

COFFのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



COFFのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのCOFF (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS