Microsoft PE / COFF SPEC(v8、セクション5.4.4)は、シンボルに次の場合があると述べています。
- IMAGE_SYM_CLASS_EXTERNALのストレージクラス
- そしてセクション番号0(IMAGE_SYM_UNDEFINED)
「サイズを示す」のは(シンボルテーブル内の)「値」フィールドです。
これは私を混乱させます。特に、「何の大きさを示しているのか」と思っています。
通常、IMAGE_SYM_CLASS_EXTERNAL
およびIMAGE_SYM_UNDEFINED
はCL(visual C ++)によってexternを表すために使用されます。
リンカがシンボルのサイズを知る必要がある、または気にする必要があるのはなぜですか?名前を知っているだけでなく、それが外部であり、適切な再配置エントリが設定されている必要がありますか?これはどれもサイズに依存するべきではありません。確かに、コンパイラはこれを知る必要がありますが、オブジェクトファイルからではなく、ヘッダーファイルからその情報を取得します。
CLによってコンパイルされたexternの簡単な例を見てきましたが、Valueフィールドは常にゼロのようです。したがって、フィールドのサイズをエンコードするために使用されていないことは明らかです。
スペックが何の「サイズ」を指しているのか誰か知っていますか?Visual Studioリンカーがそのフィールドを使用する可能性があるシナリオはありますか、それとも仕様の宣伝文句は意味がありませんか?私の限られた脳はそのようなシナリオを考えることができません。
アップデート:
少なくとも常にではないが、シンボルのサイズであるとは限らないことに注意してください。私が観察した場合、値は常に0であるため、質問があります。