The Module Information Stream¶
Introduction¶
The Module Info Stream (henceforth referred to as the Modi stream) contains information about a single module (object file, import library, etc that contributes to the binary this PDB contains debug information about. There is one modi stream for each module, and the mapping between modi stream index and module is contained in the DBI Stream. The modi stream for a single module contains line information for the compiland, as well as all CodeView information for the symbols defined in the compiland. Finally, there is a “global refs” substream which is not well understood.
Stream Layout¶
A modi stream is laid out as follows:
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];
};
Signature - Unknown. In practice only the value of
4
has been observed. It is hypothesized that this value corresponds to the set ofCV_SIGNATURE_xx
defines incvinfo.h
, with the value of4
meaning that this module has C13 line information (as opposed to C11 line information). A corollary of this is that we expect to only ever see C13 line info, and that we do not understand the format of C11 line info.Symbols - The CodeView Symbol Substream.
SymbolSize
is equal to the value ofSymByteSize
for the corresponding module’s entry in the Module Info Substream of the DBI Stream.C11LineInfo - A block containing CodeView line information in C11 format.
C11Size
is equal to the value ofC11ByteSize
from the Module Info Substream of the DBI Stream. If this value is0
, then C11 line information is not present. As mentioned previously, the format of C11 line info is not understood and we assume all line in modern PDBs to be in C13 format.C13LineInfo - A block containing CodeView line information in C13 format.
C13Size
is equal to the value ofC13ByteSize
from the Module Info Substream of the DBI Stream. If this value is0
, then C13 line information is not present.GlobalRefs - The meaning of this substream is not understood.
The CodeView Symbol Substream¶
The CodeView Symbol Substream. This is an array of variable length
records describing the functions, variables, inlining information,
and other symbols defined in the compiland. The entire array consumes
SymbolSize-4
bytes. The format of a CodeView Symbol Record (and
thusly, an array of CodeView Symbol Records) is described in
CodeView Symbol Records.