(Translated by https://www.hiragana.jp/)
COFF - Wikipedia コンテンツにスキップ

COFF

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
COFF
拡張子かくちょうしなし, .o
MIMEタイプapplication/x-coff、application/x-coffexec
開発かいはつしゃ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

参考さんこう文献ぶんけん

[編集へんしゅう]
  • DJGPP COFF Spec
  • Gircys, Gintaras (1988), Understanding and Using COFF, O'Reilly and Associates, ISBN 0-937175-31-5