5.4 COFFシンボル テーブル

本節で説明するシンボル テーブルは、従来のCOFF形式から継承されたものです。これはCodeView(r) 情報とは異なります。1つのファイルにCOFFシンボル テーブルとCodeViewデバッグ情報が含まれていても、それら2つは独立しています。Microsoftのツールの一部では、シンボル テーブルを、限定された、しかし重要な目的のために使用します。たとえば、リンカにCOMDAT情報を渡すために使われます。

シンボル テーブルの位置はCOFFヘッダ内に示されています。

シンボル テーブルはそれぞれが長さ18バイトのレコードの配列です。各レコードは標準または補助のシンボル テーブル レコードです。標準レコードはシンボルまたは名前を定義するもので、その形式は下記の通りです。

オフセット サイズ フィールド 解説
0 8 Name (*) シンボルの名前。3つの構造体の共用体によって表されます。8バイトの配列は名前が8バイトよりも長くない場合にしようされます。詳しくは5.4.1節「シンボル名の表現」を参照してください。
8 4 Value シンボルに関連付けられた値。このフィールドの解釈はSection NumberとStorage Classに依存します。典型的な意味は再配置可能アドレスです。
12 2 SectionNumber セクションを識別する符号付き整数で、セクション テーブルへの1をベースとしたインデックスを使用します。Section Number Valuesで定義されているいくつかの値には特別な意味があります。
14 2 Type タイプを表す数。Microsoftのツールはこのフィールドに0x20(関数)または0x0(関数以外)をセットします。詳しくは5.4.3節「型の表現」を参照。
16 1 StorageClass ストレージ クラスを表す列挙された値。詳しくは5.4.4節「ストレージ クラス」参照。
17 1 NumberOfAuxSymbols このレコードの後に続く補助シンボル テーブル エントリの数。

ゼロ個以上の補助シンボル テーブル レコードが、各標準シンボル テーブル レコードの直後に続きます。しかし、通常は標準シンボル レコードの後に続く補助シンボル レコードは1つだけです(長いファイル名を持つ .file レコードは例外です)。各補助レコードは標準シンボル レコードと同じサイズ(18バイト)ですが、新しいシンボルを定義するよりも、補助レコードで最後に定義されたシンボルに付加情報を与えます。いくつかの形式のどれを使うかは、Storage Classフィールドに依存します。現在補助シンボル テーブル レコードのために定義されている形式は「補助シンボル レコード」の節に示されています。

COFFシンボル テーブルを読み取るツールは、解釈不明の補助シンボル レコードを無視しなければなりません。これによって、既存のツールを破壊することなく、シンボル テーブル形式を拡張して、新しい補助レコードを追加することができるようになっています。


戻る