llvm-pdbutil - PDBファイルのフォレンジックと診断¶
概要¶
llvm-pdbutil [サブコマンド] [オプション]
説明¶
PDBファイルから型、シンボル、CodeViewレコード、およびその他の情報を表示し、PDBファイルを操作および作成します。llvm-pdbutilは通常、LLVMのPDBの読み書き機能をテストするためにFileCheckベースのテストで使用されますが、一般的なPDBファイルの調査やフォレンジック、またはcvdumpの代替としても使用できます。
サブコマンド¶
llvm-pdbutilは、それぞれ異なる目的に合わせていくつかのサブコマンドに分かれています。各コマンドの簡単な概要を以下に示し、詳細については以下のセクションで説明します。
pretty - シンボルと型の情報を、可能な限り元のソースコードのように見える形式でダンプします。
dump - CodeViewレコード、ハッシュテーブル、PDBストリームなど、PDBファイルから低レベルの型と構造をダンプします。
bytes - PDBファイルのストリーム、レコード、型、シンボルなどから、データを生のバイトとしてダンプします。
yaml2pdb - PDBファイルのyaml記述が与えられた場合、その記述に一致する有効なPDBファイルを生成します。
pdb2yaml - 指定されたPDBファイルについて、PDBを再構築できるように、ファイルの一部またはすべてをYAML記述で生成します。
merge - 2つのPDBが与えられた場合、2つの入力PDBをマージした結果である3番目のPDBを生成します。
pretty¶
重要
prettyサブコマンドはWindows DIA SDK上に構築されているため、Windows以外のプラットフォームではサポートされていません。
使用法: llvm-pdbutil pretty [オプション] <入力 PDB ファイル>
概要¶
prettyサブコマンドは、プログラムのデバッグ情報の非常に高レベルな表現を表示します。Windowsツールとデバッガーがデバッグ情報を照会する標準APIであるWindows DIA SDK上に構築されているため、低レベルのCodeViewレコードを表示するモードよりも、デバッガーがデバッグ情報をどのように解釈するかについてより信頼性の高いビューを示します。
オプション¶
フィルタリングとソートのオプション¶
注
excludeフィルターは、includeフィルターよりも優先されます。したがって、フィルターがincludeルールとexcludeルールの両方に一致する場合、それは除外されます。
- -exclude-compilands=<文字列>¶
コンパイル単位、コンパイル単位のソースファイルへの貢献、またはコンパイル単位ごとのシンボルをダンプする場合、このオプションは、指定された正規表現に一致するコンパイル単位を省略するようにllvm-pdbutilに指示します。
- -exclude-symbols=<文字列>¶
グローバルシンボル、パブリックシンボル、またはコンパイル単位ごとのシンボルをダンプする場合、このオプションは、指定された正規表現に一致するシンボルを省略するようにllvm-pdbutilに指示します。
- -exclude-types=<文字列>¶
型をダンプする場合、このオプションは、指定された正規表現に一致する型を省略するようにllvm-pdbutilに指示します。
- -include-compilands=<文字列>¶
コンパイル単位、コンパイル単位のソースファイルへの貢献、またはコンパイル単位ごとのシンボルをダンプする場合、指定された正規表現に一致するコンパイル単位のみに最初の検索を制限します。
- -include-symbols=<文字列>¶
グローバルシンボル、パブリックシンボル、またはコンパイル単位ごとのシンボルをダンプする場合、指定された正規表現に一致するシンボルのみに最初の検索を制限します。
- -include-types=<文字列>¶
型をダンプする場合、指定された正規表現に一致する型のみに最初の検索を制限します。
- -min-class-padding=<uint>¶
ベースクラスと集約フィールドメンバーのパディングを考慮して、指定された量以上の配置パディングを持つ型のみを表示します。
- -min-class-padding-imm=<uint>¶
ベースクラスと集約フィールドメンバーのパディングを無視して、指定された量以上の配置パディングを持つ型のみを表示します。
- -min-type-size=<uint>¶
sizeof(T)が指定された量以上である型Tのみを表示します。
- -no-compiler-generated¶
コンパイラーが生成した型とシンボルを表示しません
- -no-enum-definitions¶
enumをダンプする場合、enum全体(たとえば、個々の列挙子値)を表示しません。
- -no-system-libs¶
システムライブラリからのシンボルを表示しません
シンボル型オプション¶
- -all¶
このカテゴリの他のすべてのオプションを意味します。
- -class-definitions=<フォーマット>¶
指定された形式でクラス定義を表示します。
=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)
- -class-order¶
指定された順序でクラスを表示します。
=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
- -class-recurse-depth=<uint>¶
クラス定義をダンプするとき、指定された回数再帰した後で停止します。デフォルトは0で、制限はありません。
- -classes¶
クラスを表示します
- -compilands¶
コンパイル単位(例:オブジェクトファイル)を表示します
- -enums¶
enumを表示します
- -externals¶
外部(例:エクスポートされた)シンボルをダンプします
- -globals¶
グローバルシンボルをダンプします
- -lines¶
ソース行とコードアドレス間のマッピングをダンプします。
- -module-syms¶
各コンパイル単位のシンボル(変数、関数など)を表示します
- -sym-types=<型>¶
-globals、-externals、または-module-symsが指定されたときにダンプするシンボルの型。(デフォルトはすべて)
=thunks - Display thunk symbols =data - Display data symbols =funcs - Display function symbols =all - Display all symbols (default)
- -symbol-order=<順序>¶
-module-syms、-globals、または-externalsオプションでダンプされたシンボルについて、指定された順序で結果をソートします。
=none - Undefined / no particular sort order =name - Sort symbols by name =size - Sort symbols by size
- -typedefs¶
typedef型を表示します
- -types¶
すべての型を表示します(-classes、-enums、-typedefsを意味します)
その他のオプション¶
- -color-output¶
カラー出力を強制的にオンまたはオフにします。デフォルトでは、端末に出力する場合、カラーが使用されます。
- -load-address=<uint>¶
相対仮想アドレスを表示する際、プロセスが指定されたアドレスにロードされていると仮定し、絶対アドレスを表示します。
dump¶
使用法: llvm-pdbutil dump [オプション] <入力 PDB ファイル>
概要¶
dump サブコマンドは、PDB ファイルの構造に関する低レベルの情報を表示します。これは LLVM のテストインフラストラクチャで多用されますが、PDB フォレンジックにも使用できます。Microsoft の cvdump ツールと同様の役割を果たします。
注
dump サブコマンドは、ファイル形式の内部詳細を公開します。そのため、このコマンドを使用する前に、PDB ファイル形式 に精通している必要があります。
オプション¶
MSF コンテナオプション¶
- -streams¶
PDB ファイル内のすべてのストリームの概要をダンプします。
- -summary¶
MSF および PDB ヘッダー情報をダンプします。
モジュール & ファイルオプション¶
- -modi=<uint>¶
各モジュール/コンパイル単位から情報をダンプするすべてのオプションについて、指定されたモジュールに制限します。
- -files¶
表示される各モジュールに寄与するソースファイルをダンプします。
- -il¶
インライン化された行情報をダンプします (DEBUG_S_INLINEELINES CodeView サブセクション)。
- -l¶
行情報(DEBUG_S_LINES CodeView サブセクション)をダンプします。
- -modules¶
コンパイル単位情報をダンプします。
- -xme¶
クロスモジュールエクスポート (DEBUG_S_CROSSSCOPEEXPORTS CodeView サブセクション) をダンプします。
- -xmi¶
クロスモジュールインポート (DEBUG_S_CROSSSCOPEIMPORTS CodeView サブセクション) をダンプします。
シンボルオプション¶
- -globals¶
グローバルシンボルレコードをダンプします。
- -global-extras¶
ハッシュバケットやハッシュ値など、グローバルに関する追加情報をダンプします。
- -publics¶
パブリックシンボルレコードをダンプします。
- -public-extras¶
ハッシュバケットやハッシュ値など、パブリックに関する追加情報をダンプします。
- -symbols¶
ダンプされた各モジュールのシンボル(関数、変数など)をダンプします。
型レコードオプション¶
- -types¶
TPI ストリームから CodeView 型レコードをダンプします。
- -type-extras¶
ハッシュや型インデックスオフセット配列など、TPI ストリームからの追加情報をダンプします。
- -type-data¶
ダンプされた各型レコードについて、レコードの完全なバイトをバイナリでも表示します。
- -type-index=<uint>¶
指定された型インデックスを持つ型のみをダンプします。
- -ids¶
IPI ストリームから CodeView 型レコードをダンプします。
- -id-extras¶
ハッシュや型インデックスオフセット配列など、IPI ストリームからの追加情報をダンプします。
- -id-data¶
ダンプされた各 ID レコードについて、レコードの完全なバイトをバイナリでも表示します。
- -id-index=<uint>¶
指定された16進数の型インデックスを持つ ID レコードのみをダンプします。
- -dependents¶
-type-index
または-id-index
と組み合わせて使用すると、指定されたインデックスを持つ単一のレコードだけでなく、指定されたインデックスの依存関係グラフ全体をダンプします。たとえば、型インデックス 0x4000 が戻り値の型がインデックス 0x3000 の関数であり、-dependents=0x4000 を指定した場合、両方のレコード(およびツリー内の他の依存レコード)をダンプします。
その他のオプション¶
- -all¶
他のほとんどのオプションを暗示します。
- -section-contribs¶
セクションコントリビューションをダンプします。
- -section-headers¶
イメージセクションヘッダーをダンプします。
- -section-map¶
セクションマップをダンプします。
- -string-table¶
PDB 文字列テーブルをダンプします。
bytes¶
使用法: llvm-pdbutil bytes [オプション] <入力 PDB ファイル>
概要¶
dump サブコマンドと同様に、bytes サブコマンドは PDB ファイルの構造に関する低レベルの情報を表示しますが、より深いフォレンジックに使用されます。bytes サブコマンドは、指定されたコマンドラインオプションに基づいて PDB ファイル内のさまざまな構造を検索し、それらを16進数でダンプします。たとえば、PDB の出力のサポートに取り組んでいる人は、ある PDB を別の PDB と比較して、バイト単位の互換性を確保するために、このサブコマンドを多用するでしょう。ファイル全体またはストリーム全体のバイトを単純に比較するだけでは十分ではありません。なぜなら、同じ構造が2つの異なる PDB の異なる場所に存在してもまったく問題なく、「構造を見つける」ことが半分手間だからです。
オプション¶
MSF ファイルオプション¶
- -block-range=<start[-end]>¶
MSF ファイルブロックの指定された範囲からバイナリデータをダンプします。
- -byte-range=<start[-end]>¶
ファイル内の指定された範囲のバイトからバイナリデータをダンプします。
- -fpm¶
MSF 空きページマップをダンプします。
- -stream-data=<string>¶
指定されたストリームからバイナリデータをダンプします。形式は SN[:Start][@Size] です。たとえば、-stream-data=7:3@12 は、ストリーム 7 のオフセット 3 から始まる 12 バイトをダンプします。
PDB ストリームオプション¶
- -name-map¶
PDB ネームマップのバイトをダンプします。
DBIストリームオプション¶
- -ec¶
DBIストリームの編集と継続マップのサブストリームをダンプします。
- -files¶
DBIストリームのファイル情報サブストリームをダンプします。
- -modi¶
DBIストリームのmodiサブストリームをダンプします。
- -sc¶
DBIストリームのセクション貢献サブストリームをダンプします。
- -sm¶
DBIストリームからセクションマップをダンプします。
- -type-server¶
DBIストリームから型サーバーマップをダンプします。
モジュールオプション¶
- -mod=<uint>¶
このカテゴリのすべてのオプションを、指定されたモジュールインデックスに制限します。デフォルトでは、このカテゴリのオプションは、すべてのモジュールからバイトをダンプします。
- -chunks¶
各モジュールのC13デバッグサブセクションのバイトをダンプします。
- -syms¶
各モジュールからシンボルレコードサブストリームをダンプします。
型レコードオプション¶
- -id=<uint>¶
指定された型インデックスを持つIPIストリームからレコードをダンプします。
- -type=<uint>¶
指定された型インデックスを持つTPIストリームからレコードをダンプします。
pdb2yaml¶
使用法: llvm-pdbutil pdb2yaml [オプション] <入力 PDB ファイル>
概要¶
オプション¶
yaml2pdb¶
使用法: llvm-pdbutil yaml2pdb [オプション] <入力 YAML ファイル>
概要¶
YAML記述からPDBファイルを生成します。YAML構文についてはここでは説明しません。代わりに、llvm-pdbutil pdb2yamlを使用し、出力例を起点として調べてください。
オプション¶
- -pdb=<ファイル名>¶
結果のPDBを指定されたファイルに書き込みます。
merge¶
使用法: llvm-pdbutil merge [オプション] <入力 PDB ファイル 1> <入力 PDB ファイル 2>
概要¶
2つのPDBファイルを1つのファイルにマージします。
オプション¶
- -pdb=<ファイル名>¶
結果のPDBを指定されたファイルに書き込みます。