1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- =====================================
- The Module Information Stream
- =====================================
- .. contents::
- :local:
- .. _modi_stream_intro:
- 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 :doc:`DBI Stream <DbiStream>`. 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.
- .. _modi_stream_layout:
- Stream Layout
- =============
- A modi stream is laid out as follows:
- .. code-block:: c++
- 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 of
- ``CV_SIGNATURE_xx`` defines in ``cvinfo.h``, with the value of ``4``
- 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 :ref:`CodeView Symbol Substream <modi_symbol_substream>`.
- ``SymbolSize`` is equal to the value of ``SymByteSize`` for the
- corresponding module's entry in the :ref:`Module Info Substream
- <dbi_mod_info_substream>` of the :doc:`DBI Stream <DbiStream>`.
- - **C11LineInfo** - A block containing CodeView line information in C11
- format. ``C11Size`` is equal to the value of ``C11ByteSize`` from the
- :ref:`Module Info Substream <dbi_mod_info_substream>` of the
- :doc:`DBI Stream <DbiStream>`. If this value is ``0``, 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 of ``C13ByteSize`` from the
- :ref:`Module Info Substream <dbi_mod_info_substream>` of the
- :doc:`DBI Stream <DbiStream>`. If this value is ``0``, then C13 line
- information is not present.
- - **GlobalRefs** - The meaning of this substream is not understood.
- .. _modi_symbol_substream:
- 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
- :doc:`CodeViewSymbols`.
|