20

プライベート シンボルのない .exe と .pdb しかないモジュールをデバッグしています。
デバッグ セッション中に、内部構造体を検査する必要があります。明らかに、この構造体は非公開であるため、PDB には表示されませんが、幸いなことに、この構造体が定義されている .h ファイルがあります。したがって、この構造体を使用するダミー モジュールをビルドして、この構造体を含む PDB ファイルを取得できます。

これで、構造体シンボルを含むアンロードされたモジュールができました。そのシンボルをロードして、その構造体にメモリをキャストしたいと考えています。(もちろん、元の.exeをアンロードせずにデバッグしています)
問題:WinDbgは、ロードされたモジュールのシンボルのロードのみを許可しているようです...

私の質問は、アンロードされたモジュールからシンボルをロードできる簡単な方法はありますか?

試してみまし.reload /i /f MyDll.dllたが、常に...MyDll.dll - unmatched.
sympath の設定は役に立ちませんでした。

何か案は?

4

2 に答える 2

24

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

アンロードされたモジュール リストには、タイムスタンプ (イメージ/pdb マッチング用) とイメージ ベース アドレスが含まれます。Using/unlは、その情報を使用するように WinDBG に指示します。

于 2013-09-09T07:29:12.370 に答える
22

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 がタイムスタンプまたはチェックサムを検出できないため、シンボルがモジュールの正しいバージョンと一致することを認識できないためです。

于 2012-06-12T20:04:30.983 に答える