2012-06-11 9 views
14

プライベートシンボルのない.exeと.pdbのみを持つモジュールをデバッグしています。
デバッグセッション中に内部構造体を検査する必要があります。明らかに、この構造体はプライベートなのでPDBには現れませんが、幸いにもこの構造体が定義されている.hファイルがあります。したがって、私はこの構造体を使用し、この構造体を含むPDBファイルを取得するいくつかのダミーモジュールを構築することができます。アンロードされたモジュールのシンボルを読み込むようWinDbgに強制する

私は構造体シンボルを持つアンロードされたモジュールを持っています。その構造体にいくつかのメモリをキャストするためにシンボルをロードしたいと思います。私ができる簡単な方法はあり:WinDbgのが唯一のロードされたモジュールのロードシンボルを可能に...

私の質問があるようだ。問題
(私はもちろんのデバッグ、だオリジナルの.exeファイルをアンロードせずに)アンロードされたモジュールからシンボルをロードしますか?

私は.reload /i /f MyDll.dllを試しましたが、いつも...MyDll.dll - unmatchedを取得しています。
sympathを設定しても効果がありませんでした。

アイデア?

答えて

15

windbgに特定の住所にシンボルを読み込ませることができます。

0:000> .reload /f /i MyDll.dll=77777777 
    c:\sym\MyDll.pdb - unmatched 
0:000> lm 
start    end     module name 
00000000`55555555 00000000`55555555 notepad (no symbols) 
00000000`77530000 00000000`7762a000 USER32  (deferred) 
00000000`77777777 00000000`77777777 MyDll_77777777 (private pdb symbols) c:\sym\MyDll.pdb 

それはタイムスタンプまたはチェックサムを見つけることができませんので、windbgのシンボルは、モジュールの正しいバージョンと一致していることを伝えることができないので、ここでの比類のない警告があります。

+0

どこにDLLをロードするためのアドレスを取得できますか。 – 51k

17

良い方法は.reload /unl MyDll.dll

アンロードモジュールのリストでは、(画像/ PDBマッチングのための)タイムスタンプと画像ベースアドレスを含みます。 /unlを使用すると、WinDBGはその情報を使用するよう指示します。

+1

ありがとうございます:あなたのコマンドは私のために働いた唯一のバリエーションです! – olegvs

+0

これは私のためにも働いた.. – 51k

関連する問題