モジュール情報ストリーム¶
はじめに¶
モジュール情報ストリーム(以下、Modiストリームと呼びます)には、単一のモジュール(オブジェクトファイル、インポートライブラリなど、このPDBがデバッグ情報を保持しているバイナリに寄与するファイル)に関する情報が含まれています。各モジュールには1つのModiストリームがあり、ModiストリームのインデックスとモジュールのマッピングはDBIストリームに含まれています。単一のモジュールのModiストリームには、コンパイランドの行情報と、コンパイランドで定義されたシンボルのすべてのCodeView情報が含まれています。最後に、「グローバル参照」サブストリームがありますが、これはよく理解されていません。
ストリームレイアウト¶
Modiストリームは次のようにレイアウトされています。
struct ModiStream {
uint32_t Signature;
uint8_t Symbols[SymbolSize-4];
uint8_t C11LineInfo[C11Size];
uint8_t C13LineInfo[C13Size];
uint32_t GlobalRefsSize;
uint8_t GlobalRefs[GlobalRefsSize];
};
シグネチャ - 不明。実際には
4
の値だけが観測されています。cvinfo.h
で定義されているCV_SIGNATURE_xx
のセットに対応すると仮定されています。4
の値は、このモジュールがC11行情報ではなくC13行情報を持っていることを意味します。この結果として、C13行情報しか存在しないと予想され、C11行情報の形式は理解されていません。シンボル - CodeViewシンボルサブストリーム。
SymbolSize
は、モジュール情報サブストリームのDBIストリームに対応するモジュールのエントリのSymByteSize
の値と等しくなります。C11LineInfo - C11形式のCodeView行情報を含むブロック。
C11Size
は、モジュール情報サブストリームのDBIストリームのC11ByteSize
の値と等しくなります。この値が0
の場合、C11行情報は存在しません。前述のように、C11行情報の形式は理解されておらず、最新のPDBのすべての行情報はC13形式であると仮定します。C13LineInfo - C13形式のCodeView行情報を含むブロック。
C13Size
は、モジュール情報サブストリームのDBIストリームのC13ByteSize
の値と等しくなります。この値が0
の場合、C13行情報は存在しません。GlobalRefs - このサブストリームの意味は理解されていません。
CodeViewシンボルサブストリーム¶
CodeViewシンボルサブストリーム。これは、コンパイランドで定義された関数、変数、インライン情報、およびその他のシンボルを記述する可変長レコードの配列です。配列全体でSymbolSize-4
バイトを消費します。CodeViewシンボルレコード(およびその結果、CodeViewシンボルレコードの配列)の形式については、CodeViewシンボルレコードを参照してください。