1===================================== 2The Module Information Stream 3===================================== 4 5.. contents:: 6 :local: 7 8.. _modi_stream_intro: 9 10Introduction 11============ 12 13The Module Info Stream (henceforth referred to as the Modi stream) contains 14information about a single module (object file, import library, etc that 15contributes to the binary this PDB contains debug information about. There 16is one modi stream for each module, and the mapping between modi stream index 17and module is contained in the :doc:`DBI Stream <DbiStream>`. The modi stream 18for a single module contains line information for the compiland, as well as 19all CodeView information for the symbols defined in the compiland. Finally, 20there is a "global refs" substream which is not well understood. 21 22.. _modi_stream_layout: 23 24Stream Layout 25============= 26 27A modi stream is laid out as follows: 28 29 30.. code-block:: c++ 31 32 struct ModiStream { 33 uint32_t Signature; 34 uint8_t Symbols[SymbolSize-4]; 35 uint8_t C11LineInfo[C11Size]; 36 uint8_t C13LineInfo[C13Size]; 37 38 uint32_t GlobalRefsSize; 39 uint8_t GlobalRefs[GlobalRefsSize]; 40 }; 41 42- **Signature** - Unknown. In practice only the value of ``4`` has been 43 observed. It is hypothesized that this value corresponds to the set of 44 ``CV_SIGNATURE_xx`` defines in ``cvinfo.h``, with the value of ``4`` 45 meaning that this module has C13 line information (as opposed to C11 line 46 information). A corollary of this is that we expect to only ever see 47 C13 line info, and that we do not understand the format of C11 line info. 48 49- **Symbols** - The :ref:`CodeView Symbol Substream <modi_symbol_substream>`. 50 ``SymbolSize`` is equal to the value of ``SymByteSize`` for the 51 corresponding module's entry in the :ref:`Module Info Substream 52 <dbi_mod_info_substream>` of the :doc:`DBI Stream <DbiStream>`. 53 54- **C11LineInfo** - A block containing CodeView line information in C11 55 format. ``C11Size`` is equal to the value of ``C11ByteSize`` from the 56 :ref:`Module Info Substream <dbi_mod_info_substream>` of the 57 :doc:`DBI Stream <DbiStream>`. If this value is ``0``, then C11 line 58 information is not present. As mentioned previously, the format of 59 C11 line info is not understood and we assume all line in modern PDBs 60 to be in C13 format. 61 62- **C13LineInfo** - A block containing CodeView line information in C13 63 format. ``C13Size`` is equal to the value of ``C13ByteSize`` from the 64 :ref:`Module Info Substream <dbi_mod_info_substream>` of the 65 :doc:`DBI Stream <DbiStream>`. If this value is ``0``, then C13 line 66 information is not present. 67 68- **GlobalRefs** - The meaning of this substream is not understood. 69 70.. _modi_symbol_substream: 71 72The CodeView Symbol Substream 73============================= 74 75The CodeView Symbol Substream. This is an array of variable length 76records describing the functions, variables, inlining information, 77and other symbols defined in the compiland. The entire array consumes 78``SymbolSize-4`` bytes. The format of a CodeView Symbol Record (and 79thusly, an array of CodeView Symbol Records) is described in 80:doc:`CodeViewSymbols`. 81