2011-10-27 12 views

答えて

2

シンボルをバイナリに一致させるために、WinDbgはDebug Directoriesと呼ばれるものを探します。デバッグディレクトリは、PEモジュールのセクションです(これは、すべてのタイプの実行可能ファイルに対してWindowsによって使用されるファイルフォーマットです)。デバッグディレクトリには、単にデバッグ情報のタイプへのリンクが含まれています。これはntdll.dllのために出力され

... 
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 

... 

:あなたはCMDウィンドウlink /dump /headers <my_module_name>でコマンドを入力すると、それはこのようなものを出力します。 CV(CodeView用)のデバッグ情報がntdll.pdbに含まれており、そのPDBのGUIDがリンク内のものと一致していることがわかります。そのGUIDは、ビルド時に各モジュールに対してランダムに生成されます。

WinDbgのコマンド!lmiも、この情報を別の形式でダンプします。

シンボルサーバーからシンボルを読み込むときに、シンボルサーバーに要求が送信され、一致するGUIDを持つ 'ntdll.pdb'という名前のファイルが取得されます。

+0

この情報はアセンブリ内に埋め込まれたPEモジュールの一部ですか?アプリケーションを作成すると、別のOSで異なるサービスパックで実行できます。 PEモジュールに格納されているこの情報が、アプリケーション自体が異なるOSで動作しているときにどのように使用できるのか混乱しています。 –

+0

各PEモジュールには独自のシンボルファイルがあります。 OSは異なるサービスパック、パッチ、ホットフィックス、プライベートバイナリなどの複数のバージョンから構成されているため、「OS用のシンボル」はありません。 –

+0

アプリケーションアセンブリがVista上でコンパイルされたとしましょう。 Windows 7とWindows Server 2008用のダンプを生成します。この場合、PEモジュールはVista用のIDを持つでしょうか?この場合、2つのダンプでWindows 7と2008のシンボルがどのように表示されますか? –

関連する問題