プライベートシンボルのない.exeと.pdbしかないモジュールをデバッグしています。
デバッグセッション中に、内部構造体を検査する必要があります。明らかに、この構造体はプライベートであるためPDBには表示されませんが、幸いなことに、この構造体が定義されている.hファイルがあります。したがって、この構造体を使用するダミーモジュールを作成し、この構造体を含むPDBファイルを取得できます。
これで、構造体シンボルを含むアンロードされたモジュールができました。その構造体にメモリをキャストするために、そのシンボルをロードしたいと思います。 (もちろん、デバッグしている元の.exeをアンロードせずに)
問題:WinDbgはロードされたモジュールのシンボルのロードのみを許可しているようです...
私の質問は:アンロードされたモジュールからシンボルをロードする簡単な方法はありますか?
私はもう試した .reload /i /f MyDll.dll
しかし私はいつも...MyDll.dll - unmatched
。
シンパスの設定は役に立ちませんでした。
何か案は?
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がシンボルがモジュールの正しいバージョンと一致することを認識できないためです。
より良い方法は.reload /unl MyDll.dll
です
アンロードされたモジュールリストには、タイムスタンプ(イメージ/ pdbマッチング用)とイメージベースアドレスが含まれています。 /unl
を使用すると、WinDBGにその情報を使用するように指示します。