模組資訊串流¶
簡介¶
模組資訊串流(以下簡稱 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
等於 DBI 串流 的 模組資訊子串流 中對應模組條目的SymByteSize
值。C11LineInfo - 包含 C11 格式的 CodeView 行資訊的區塊。
C11Size
等於 DBI 串流 的 模組資訊子串流 中的C11ByteSize
值。如果此值為0
,則表示不存在 C11 行資訊。如前所述,我們不了解 C11 行資訊的格式,並且我們假設現代 PDB 中的所有行資訊都採用 C13 格式。C13LineInfo - 以 C13 格式包含 CodeView 行資訊的區塊。
C13Size
等於 模組資訊子資料流 中C13ByteSize
的值,該子資料流位於 DBI 資料流。如果此值為0
,則表示不存在 C13 行資訊。GlobalRefs - 此子資料流的含義尚不清楚。
CodeView 符號子資料流¶
CodeView 符號子資料流。這是一個變長記錄陣列,描述編譯單元中定義的函數、變數、內嵌資訊和其他符號。整個陣列佔用 SymbolSize-4
位元組。CodeView 符號記錄(以及 CodeView 符號記錄陣列)的格式在 CodeView 符號記錄 中描述。