81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
=====================================
 | 
						|
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`.
 |