windbgがどのOSシンボルをダンプファイル用にダウンロードするかを決定する方法

ダンプファイル解析を行うと、Microsoftシンボルサーバーを指すようにシンボルパスを設定します。 windbgはダンプファイルがどのOSで生成されたか知っていますが、そのOSに正しいシンボルをどのようにダウンロードしますか?

0

1 答え

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'という名前のファイルが取得されます。

2
追加された
各PEモジュールには独自のシンボルファイルがあります。 OSは異なるサービスパック、パッチ、ホットフィックス、プライベートバイナリなどからのバージョンの混合物で構成されているため、「OS用のシンボル」はありません。
追加された 著者 seva titov,
ここでも、「OSシンボル」はなく、特定のPEモジュールのシンボルがあります。ダンプには、プロセスアドレス空間に現在マップされているモジュールのリストが含まれています。 kernel32.dllにはさまざまなバージョンがあります。OSのプロセッサアーキテクチャによって、より多くのバージョンに異なるOSパッチが付属しています。デバッガがkernel32.dllのシンボルを解決する必要がある場合、デバッガはモジュール情報構造をルックアップします。モジュール構造は、モジュールが最初にプロセスにロードされたときにローダによって作成されます。この情報には、デバッグディレクトリを含むPEイメージのいくつかのセクションが含まれています。
追加された 著者 seva titov,
この情報がアセンブリ内に埋め込まれたPEモジュールの一部であることを意味しますか?アプリケーションを作成すると、別のOSで異なるサービスパックで実行できます。 PEモジュールに格納されているこの情報が、アプリケーション自体が異なるOSで動作しているときにどのように使用できるのか混乱しています。
追加された 著者 Silverlight Student,
アプリケーションアセンブリがVista上でコンパイルされたとしましょう。 Windows 7とWindows Server 2008用のダンプを生成します。この場合、PEモジュールはVista用のIDを持つでしょうか?この場合、2つのダンプでWindows 7と2008のシンボルがどのように表示されますか?
追加された 著者 Silverlight Student,