You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			586 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			586 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| llvm-pdbutil - PDB File forensics and diagnostics
 | |
| =================================================
 | |
| 
 | |
| .. contents::
 | |
|    :local:
 | |
| 
 | |
| Synopsis
 | |
| --------
 | |
| 
 | |
| :program:`llvm-pdbutil` [*subcommand*] [*options*]
 | |
| 
 | |
| Description
 | |
| -----------
 | |
| 
 | |
| Display types, symbols, CodeView records, and other information from a
 | |
| PDB file, as well as manipulate and create PDB files.  :program:`llvm-pdbutil`
 | |
| is normally used by FileCheck-based tests to test LLVM's PDB reading and
 | |
| writing functionality, but can also be used for general PDB file investigation
 | |
| and forensics, or as a replacement for cvdump.
 | |
| 
 | |
| Subcommands
 | |
| -----------
 | |
| 
 | |
| :program:`llvm-pdbutil` is separated into several subcommands each tailored to
 | |
| a different purpose.  A brief summary of each command follows, with more detail
 | |
| in the sections that follow.
 | |
| 
 | |
|   * :ref:`pretty_subcommand` - Dump symbol and type information in a format that
 | |
|     tries to look as much like the original source code as possible.
 | |
|   * :ref:`dump_subcommand` - Dump low level types and structures from the PDB
 | |
|     file, including CodeView records, hash tables, PDB streams, etc.
 | |
|   * :ref:`bytes_subcommand` - Dump data from the PDB file's streams, records,
 | |
|     types, symbols, etc as raw bytes.
 | |
|   * :ref:`yaml2pdb_subcommand` - Given a yaml description of a PDB file, produce
 | |
|     a valid PDB file that matches that description.
 | |
|   * :ref:`pdb2yaml_subcommand` - For a given PDB file, produce a YAML
 | |
|     description of some or all of the file in a way that the PDB can be
 | |
|     reconstructed.
 | |
|   * :ref:`merge_subcommand` - Given two PDBs, produce a third PDB that is the
 | |
|     result of merging the two input PDBs.
 | |
| 
 | |
| .. _pretty_subcommand:
 | |
| 
 | |
| pretty
 | |
| ~~~~~~
 | |
| 
 | |
| .. program:: llvm-pdbutil pretty
 | |
| 
 | |
| .. important::
 | |
|    The **pretty** subcommand is built on the Windows DIA SDK, and as such is not
 | |
|    supported on non-Windows platforms.
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` pretty [*options*] <input PDB file>
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^^^^^
 | |
| 
 | |
| The *pretty* subcommand displays a very high level representation of your
 | |
| program's debug info.  Since it is built on the Windows DIA SDK which is the
 | |
| standard API that Windows tools and debuggers query debug information, it
 | |
| presents a more authoritative view of how a debugger is going to interpret your
 | |
| debug information than a mode which displays low-level CodeView records.
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| Filtering and Sorting Options
 | |
| +++++++++++++++++++++++++++++
 | |
| 
 | |
| .. note::
 | |
|    *exclude* filters take priority over *include* filters.  So if a filter
 | |
|    matches both an include and an exclude rule, then it is excluded.
 | |
| 
 | |
| .. option:: -exclude-compilands=<string>
 | |
| 
 | |
|  When dumping compilands, compiland source-file contributions, or per-compiland
 | |
|  symbols, this option instructs **llvm-pdbutil** to omit any compilands that
 | |
|  match the specified regular expression.
 | |
| 
 | |
| .. option:: -exclude-symbols=<string>
 | |
| 
 | |
|  When dumping global, public, or per-compiland symbols, this option instructs
 | |
|  **llvm-pdbutil** to omit any symbols that match the specified regular
 | |
|  expression.
 | |
| 
 | |
| .. option:: -exclude-types=<string>
 | |
| 
 | |
|  When dumping types, this option instructs **llvm-pdbutil** to omit any types
 | |
|  that match the specified regular expression.
 | |
| 
 | |
| .. option:: -include-compilands=<string>
 | |
| 
 | |
|  When dumping compilands, compiland source-file contributions, or per-compiland
 | |
|  symbols, limit the initial search to only those compilands that match the
 | |
|  specified regular expression.
 | |
| 
 | |
| .. option:: -include-symbols=<string>
 | |
| 
 | |
|  When dumping global, public, or per-compiland symbols, limit the initial
 | |
|  search to only those symbols that match the specified regular expression.
 | |
| 
 | |
| .. option:: -include-types=<string>
 | |
| 
 | |
|  When dumping types, limit the initial search to only those types that match
 | |
|  the specified regular expression.
 | |
| 
 | |
| .. option:: -min-class-padding=<uint>
 | |
| 
 | |
|  Only display types that have at least the specified amount of alignment
 | |
|  padding, accounting for padding in base classes and aggregate field members.
 | |
| 
 | |
| .. option:: -min-class-padding-imm=<uint>
 | |
| 
 | |
|  Only display types that have at least the specified amount of alignment
 | |
|  padding, ignoring padding in base classes and aggregate field members.
 | |
| 
 | |
| .. option:: -min-type-size=<uint>
 | |
| 
 | |
|  Only display types T where sizeof(T) is greater than or equal to the specified
 | |
|  amount.
 | |
| 
 | |
| .. option:: -no-compiler-generated
 | |
| 
 | |
|  Don't show compiler generated types and symbols
 | |
| 
 | |
| .. option:: -no-enum-definitions
 | |
| 
 | |
|  When dumping an enum, don't show the full enum (e.g. the individual enumerator
 | |
|  values).
 | |
| 
 | |
| .. option:: -no-system-libs
 | |
| 
 | |
|  Don't show symbols from system libraries
 | |
| 
 | |
| Symbol Type Options
 | |
| +++++++++++++++++++
 | |
| .. option:: -all
 | |
| 
 | |
|  Implies all other options in this category.
 | |
| 
 | |
| .. option:: -class-definitions=<format>
 | |
| 
 | |
|  Displays class definitions in the specified format.
 | |
| 
 | |
|  .. code-block:: text
 | |
| 
 | |
|     =all      - Display all class members including data, constants, typedefs, functions, etc (default)
 | |
|     =layout   - Only display members that contribute to class size.
 | |
|     =none     - Don't display class definitions (e.g. only display the name and base list)
 | |
| 
 | |
| .. option:: -class-order
 | |
| 
 | |
|  Displays classes in the specified order.
 | |
| 
 | |
|  .. code-block:: text
 | |
| 
 | |
|     =none            - Undefined / no particular sort order (default)
 | |
|     =name            - Sort classes by name
 | |
|     =size            - Sort classes by size
 | |
|     =padding         - Sort classes by amount of padding
 | |
|     =padding-pct     - Sort classes by percentage of space consumed by padding
 | |
|     =padding-imm     - Sort classes by amount of immediate padding
 | |
|     =padding-pct-imm - Sort classes by percentage of space consumed by immediate padding
 | |
| 
 | |
| .. option::  -class-recurse-depth=<uint>
 | |
| 
 | |
|  When dumping class definitions, stop after recursing the specified number of times.  The
 | |
|  default is 0, which is no limit.
 | |
| 
 | |
| .. option::  -classes
 | |
| 
 | |
|  Display classes
 | |
| 
 | |
| .. option::  -compilands
 | |
| 
 | |
|  Display compilands (e.g. object files)
 | |
| 
 | |
| .. option::  -enums
 | |
| 
 | |
|  Display enums
 | |
| 
 | |
| .. option::  -externals
 | |
| 
 | |
|  Dump external (e.g. exported) symbols
 | |
| 
 | |
| .. option::  -globals
 | |
| 
 | |
|  Dump global symbols
 | |
| 
 | |
| .. option::  -lines
 | |
| 
 | |
|  Dump the mappings between source lines and code addresses.
 | |
| 
 | |
| .. option::  -module-syms
 | |
| 
 | |
|  Display symbols (variables, functions, etc) for each compiland
 | |
| 
 | |
| .. option::  -sym-types=<types>
 | |
| 
 | |
|  Type of symbols to dump when -globals, -externals, or -module-syms is
 | |
|  specified. (default all)
 | |
| 
 | |
|  .. code-block:: text
 | |
| 
 | |
|     =thunks - Display thunk symbols
 | |
|     =data   - Display data symbols
 | |
|     =funcs  - Display function symbols
 | |
|     =all    - Display all symbols (default)
 | |
| 
 | |
| .. option::  -symbol-order=<order>
 | |
| 
 | |
|  For symbols dumped via the -module-syms, -globals, or -externals options, sort
 | |
|  the results in specified order.
 | |
| 
 | |
|  .. code-block:: text
 | |
| 
 | |
|     =none - Undefined / no particular sort order
 | |
|     =name - Sort symbols by name
 | |
|     =size - Sort symbols by size
 | |
| 
 | |
| .. option::  -typedefs
 | |
| 
 | |
|  Display typedef types
 | |
| 
 | |
| .. option::  -types
 | |
| 
 | |
|  Display all types (implies -classes, -enums, -typedefs)
 | |
| 
 | |
| Other Options
 | |
| +++++++++++++
 | |
| 
 | |
| .. option:: -color-output
 | |
| 
 | |
|  Force color output on or off.  By default, color if used if outputting to a
 | |
|  terminal.
 | |
| 
 | |
| .. option:: -load-address=<uint>
 | |
| 
 | |
|  When displaying relative virtual addresses, assume the process is loaded at the
 | |
|  given address and display what would be the absolute address.
 | |
| 
 | |
| .. _dump_subcommand:
 | |
| 
 | |
| dump
 | |
| ~~~~
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` dump [*options*] <input PDB file>
 | |
| 
 | |
| .. program:: llvm-pdbutil dump
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^^^^^
 | |
| 
 | |
| The **dump** subcommand displays low level information about the structure of a
 | |
| PDB file.  It is used heavily by LLVM's testing infrastructure, but can also be
 | |
| used for PDB forensics.  It serves a role similar to that of Microsoft's
 | |
| `cvdump` tool.
 | |
| 
 | |
| .. note::
 | |
|    The **dump** subcommand exposes internal details of the file format.  As
 | |
|    such, the reader should be familiar with :doc:`/PDB/index` before using this
 | |
|    command.
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| MSF Container Options
 | |
| +++++++++++++++++++++
 | |
| 
 | |
| .. option:: -streams
 | |
| 
 | |
|  dump a summary of all of the streams in the PDB file.
 | |
| 
 | |
| .. option:: -stream-blocks
 | |
| 
 | |
|  In conjunction with :option:`-streams`, add information to the output about
 | |
|  what blocks the specified stream occupies.
 | |
| 
 | |
| .. option:: -summary
 | |
| 
 | |
|  Dump MSF and PDB header information.
 | |
| 
 | |
| Module & File Options
 | |
| +++++++++++++++++++++
 | |
| 
 | |
| .. option:: -modi=<uint>
 | |
| 
 | |
|  For all options that dump information from each module/compiland, limit to
 | |
|  the specified module.
 | |
| 
 | |
| .. option:: -files
 | |
| 
 | |
|  Dump the source files that contribute to each displayed module.
 | |
| 
 | |
| .. option:: -il
 | |
| 
 | |
|  Dump inlinee line information (DEBUG_S_INLINEELINES CodeView subsection)
 | |
| 
 | |
| .. option:: -l
 | |
| 
 | |
|  Dump line information (DEBUG_S_LINES CodeView subsection)
 | |
| 
 | |
| .. option:: -modules
 | |
| 
 | |
|  Dump compiland information
 | |
| 
 | |
| .. option:: -xme
 | |
| 
 | |
|  Dump cross module exports (DEBUG_S_CROSSSCOPEEXPORTS CodeView subsection)
 | |
| 
 | |
| .. option:: -xmi
 | |
| 
 | |
|  Dump cross module imports (DEBUG_S_CROSSSCOPEIMPORTS CodeView subsection)
 | |
| 
 | |
| Symbol Options
 | |
| ++++++++++++++
 | |
| 
 | |
| .. option:: -globals
 | |
| 
 | |
|  dump global symbol records
 | |
| 
 | |
| .. option:: -global-extras
 | |
| 
 | |
|  dump additional information about the globals, such as hash buckets and hash
 | |
|  values.
 | |
| 
 | |
| .. option:: -publics
 | |
| 
 | |
|  dump public symbol records
 | |
| 
 | |
| .. option:: -public-extras
 | |
| 
 | |
|  dump additional information about the publics, such as hash buckets and hash
 | |
|  values.
 | |
| 
 | |
| .. option:: -symbols
 | |
| 
 | |
|  dump symbols (functions, variables, etc) for each module dumped.
 | |
| 
 | |
| .. option:: -sym-data
 | |
| 
 | |
|  For each symbol record dumped as a result of the :option:`-symbols` option,
 | |
|  display the full bytes of the record in binary as well.
 | |
| 
 | |
| Type Record Options
 | |
| +++++++++++++++++++
 | |
| 
 | |
| .. option:: -types
 | |
| 
 | |
|  Dump CodeView type records from TPI stream
 | |
| 
 | |
| .. option:: -type-extras
 | |
| 
 | |
|  Dump additional information from the TPI stream, such as hashes and the type
 | |
|  index offsets array.
 | |
| 
 | |
| .. option:: -type-data
 | |
| 
 | |
|  For each type record dumped, display the full bytes of the record in binary as
 | |
|  well.
 | |
| 
 | |
| .. option:: -type-index=<uint>
 | |
| 
 | |
|  Only dump types with the specified type index.
 | |
| 
 | |
| .. option:: -ids
 | |
| 
 | |
|  Dump CodeView type records from IPI stream.
 | |
| 
 | |
| .. option:: -id-extras
 | |
| 
 | |
|  Dump additional information from the IPI stream, such as hashes and the type
 | |
|  index offsets array.
 | |
| 
 | |
| .. option:: -id-data
 | |
| 
 | |
|  For each ID record dumped, display the full bytes of the record in binary as
 | |
|  well.
 | |
| 
 | |
| .. option:: -id-index=<uint>
 | |
| 
 | |
|  only dump ID records with the specified hexadecimal type index.
 | |
| 
 | |
| .. option:: -dependents
 | |
| 
 | |
|  When used in conjunction with :option:`-type-index` or :option:`-id-index`,
 | |
|  dumps the entire dependency graph for the specified index instead of just the
 | |
|  single record with the specified index.  For example, if type index 0x4000 is
 | |
|  a function whose return type has index 0x3000, and you specify
 | |
|  `-dependents=0x4000`, then this would dump both records (as well as any other
 | |
|  dependents in the tree).
 | |
| 
 | |
| Miscellaneous Options
 | |
| +++++++++++++++++++++
 | |
| 
 | |
| .. option:: -all
 | |
| 
 | |
|  Implies most other options.
 | |
| 
 | |
| .. option:: -section-contribs
 | |
| 
 | |
|  Dump section contributions.
 | |
| 
 | |
| .. option:: -section-headers
 | |
| 
 | |
|  Dump image section headers.
 | |
| 
 | |
| .. option:: -section-map
 | |
| 
 | |
|  Dump section map.
 | |
| 
 | |
| .. option:: -string-table
 | |
| 
 | |
|  Dump PDB string table.
 | |
| 
 | |
| .. _bytes_subcommand:
 | |
| 
 | |
| bytes
 | |
| ~~~~~
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` bytes [*options*] <input PDB file>
 | |
| 
 | |
| .. program:: llvm-pdbutil bytes
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^
 | |
| 
 | |
| Like the **dump** subcommand, the **bytes** subcommand displays low level
 | |
| information about the structure of a PDB file, but it is used for even deeper
 | |
| forensics.  The **bytes** subcommand finds various structures in a PDB file
 | |
| based on the command line options specified, and dumps them in hex.  Someone
 | |
| working on support for emitting PDBs would use this heavily, for example, to
 | |
| compare one PDB against another PDB to ensure byte-for-byte compatibility.  It
 | |
| is not enough to simply compare the bytes of an entire file, or an entire stream
 | |
| because it's perfectly fine for the same structure to exist at different
 | |
| locations in two different PDBs, and "finding" the structure is half the battle.
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| MSF File Options
 | |
| ++++++++++++++++
 | |
| 
 | |
| .. option:: -block-range=<start[-end]>
 | |
| 
 | |
|  Dump binary data from specified range of MSF file blocks.
 | |
| 
 | |
| .. option:: -byte-range=<start[-end]>
 | |
| 
 | |
|  Dump binary data from specified range of bytes in the file.
 | |
| 
 | |
| .. option:: -fpm
 | |
| 
 | |
|  Dump the MSF free page map.
 | |
| 
 | |
| .. option:: -stream-data=<string>
 | |
| 
 | |
|  Dump binary data from the specified streams.  Format is SN[:Start][@Size].
 | |
|  For example, `-stream-data=7:3@12` dumps 12 bytes from stream 7, starting
 | |
|  at offset 3 in the stream.
 | |
| 
 | |
| PDB Stream Options
 | |
| ++++++++++++++++++
 | |
| 
 | |
| .. option:: -name-map
 | |
| 
 | |
|  Dump bytes of PDB Name Map
 | |
| 
 | |
| DBI Stream Options
 | |
| ++++++++++++++++++
 | |
| 
 | |
| .. option:: -ec
 | |
| 
 | |
|  Dump the edit and continue map substream of the DBI stream.
 | |
| 
 | |
| .. option:: -files
 | |
| 
 | |
|  Dump the file info substream of the DBI stream.
 | |
| 
 | |
| .. option:: -modi
 | |
| 
 | |
|  Dump the modi substream of the DBI stream.
 | |
| 
 | |
| .. option:: -sc
 | |
| 
 | |
|  Dump section contributions substream of the DBI stream.
 | |
| 
 | |
| .. option:: -sm
 | |
| 
 | |
|  Dump the section map from the DBI stream.
 | |
| 
 | |
| .. option:: -type-server
 | |
| 
 | |
|  Dump the type server map from the DBI stream.
 | |
| 
 | |
| Module Options
 | |
| ++++++++++++++
 | |
| 
 | |
| .. option:: -mod=<uint>
 | |
| 
 | |
|  Limit all options in this category to the specified module index.  By default,
 | |
|  options in this category will dump bytes from all modules.
 | |
| 
 | |
| .. option:: -chunks
 | |
| 
 | |
|  Dump the bytes of each module's C13 debug subsection.
 | |
| 
 | |
| .. option:: -split-chunks
 | |
| 
 | |
|  When specified with :option:`-chunks`, split the C13 debug subsection into a
 | |
|  separate chunk for each subsection type, and dump them separately.
 | |
| 
 | |
| .. option:: -syms
 | |
| 
 | |
|  Dump the symbol record substream from each module.
 | |
| 
 | |
| Type Record Options
 | |
| +++++++++++++++++++
 | |
| 
 | |
| .. option:: -id=<uint>
 | |
| 
 | |
|  Dump the record from the IPI stream with the given type index.
 | |
| 
 | |
| .. option:: -type=<uint>
 | |
| 
 | |
|  Dump the record from the TPI stream with the given type index.
 | |
| 
 | |
| .. _pdb2yaml_subcommand:
 | |
| 
 | |
| pdb2yaml
 | |
| ~~~~~~~~
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` pdb2yaml [*options*] <input PDB file>
 | |
| 
 | |
| .. program:: llvm-pdbutil pdb2yaml
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| .. _yaml2pdb_subcommand:
 | |
| 
 | |
| yaml2pdb
 | |
| ~~~~~~~~
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` yaml2pdb [*options*] <input YAML file>
 | |
| 
 | |
| .. program:: llvm-pdbutil yaml2pdb
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^
 | |
| 
 | |
| Generate a PDB file from a YAML description.  The YAML syntax is not described
 | |
| here.  Instead, use :ref:`llvm-pdbutil pdb2yaml <pdb2yaml_subcommand>` and
 | |
| examine the output for an example starting point.
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| .. option:: -pdb=<file-name>
 | |
| 
 | |
| Write the resulting PDB to the specified file.
 | |
| 
 | |
| .. _merge_subcommand:
 | |
| 
 | |
| merge
 | |
| ~~~~~
 | |
| 
 | |
| USAGE: :program:`llvm-pdbutil` merge [*options*] <input PDB file 1> <input PDB file 2>
 | |
| 
 | |
| .. program:: llvm-pdbutil merge
 | |
| 
 | |
| Summary
 | |
| ^^^^^^^
 | |
| 
 | |
| Merge two PDB files into a single file.
 | |
| 
 | |
| Options
 | |
| ^^^^^^^
 | |
| 
 | |
| .. option:: -pdb=<file-name>
 | |
| 
 | |
| Write the resulting PDB to the specified file.
 |