模块信息流¶
简介¶
模块信息流(以下简称 Modi 流)包含有关单个模块的信息(目标文件、导入库等,这些模块有助于此 PDB 包含有关二进制文件的调试信息)。每个模块都有一个 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
的值表示此模块具有 C13 行信息(而不是 C11 行信息)。由此推论,我们预计只会看到 C13 行信息,并且我们不了解 C11 行信息的格式。符号 - CodeView 符号子流。
SymbolSize
等于模块信息子流中相应模块条目的SymByteSize
的值。DBI 流。C11LineInfo - 包含 C11 格式的 CodeView 行信息的块。
C11Size
等于模块信息子流中C11ByteSize
的值。DBI 流。如果此值为0
,则表示不存在 C11 行信息。如前所述,我们不了解 C11 行信息的格式,并且我们假设所有现代 PDB 中的行信息都采用 C13 格式。C13LineInfo - 包含 C13 格式的 CodeView 行信息的块。
C13Size
等于模块信息子流中C13ByteSize
的值。DBI 流。如果此值为0
,则表示不存在 C13 行信息。GlobalRefs - 此子流的含义尚不清楚。
CodeView 符号子流¶
CodeView 符号子流。这是一个可变长度记录数组,描述了在编译单元中定义的函数、变量、内联信息和其他符号。整个数组占用SymbolSize-4
字节。CodeView 符号记录(以及由此产生的 CodeView 符号记录数组)的格式在CodeView 符号记录中进行了描述。