質問: windbgがどのOSシンボルをダンプファイル用にダウンロードするかを決定する方法 ダンプファイル解析を行うと、Microsoftシンボルサーバーを指すようにシンボルパスを設定します。 windbgはダンプファイルがどのOSで生成されたか知っていますが、そのOSに正しいシンボルをどのようにダウンロードしますか?
回答: To match symbols to binary, WinDbg looks at the thing called Debug Directories. Debug Directories are sections in PE modules (which is a file format used by Windows for all types of executables). Debug Directories simply contain links to types of debug information. If you type command in cmd window `link /dump /headers` , it will print out something like this: ``` ... Debug Directories Time Type Size RVA Pointer -------- ------ -------- -------- -------- 4CC78FB1 cv 22 00102588 101988 Format: RSDS, {30976E0B-FBF7-45EF-8608-99932F2B791F}, 2, ntdll.pdb 4CC78FB1 ( A) 4 00102584 101984 BB03197E ... ``` これはntdll.dllのために出力されます。 CV(CodeView用)のデバッグ情報がntdll.pdbに含まれており、そのPDBのGUIDがリンク内のものと一致していることがわかります。そのGUIDは、ビルド時に各モジュールに対してランダムに生成されます。 WinDbgのコマンド`!lmi` は、この情報を別の形式でダンプします。 シンボルサーバからシンボルをロードするときにWinDbgがシンボルサーバに要求を送信すると、一致するGUIDを持つ 'ntdll.pdb'という名前のファイルが取得されます。