バックグラウンド: 私はWindbgを使ってMicrosoftのWinQualサービスからのミニダンプによる原因を診断しています。私はPDBやバイナリがビルドされたときと同じパスの場所に適切に設定するために時間をかけました。
今日、私は問題を理解するために逆アセンブルを見たいと思うミニダンプに出くわしたが、windbgは関数の一部を逆にするだけである。
私の機能は次のようになります。
SomeStruct* STDCALL getThing(int id)
{
S_ASSERT(a);
S_ASSERT(b);
S_ASSERT(c);
SomeStruct* result = fn(id);
S_ASSERT(d);
return result;
}
S_ASSERT
私たちのマクロは最終的に関数を呼び出します int 3
リリースビルドでも命令がヒットします。分解を検査せずに、どれが当たったのか分からない。
windbgを使って、私はジャンプすることができます getThing
コールスタックで、逆アセンブリをアクティブにしてコードを確認しますが、逆アセンブリ内でスクロールバックできないのです。 module!getThing
関数のアドレスを取得し、それを書いた逆アセンブリウィンドウ内のアドレス指示の代わりに、私は〜100行を得る?関数の入り口点のようには見えませんが、正しい関数の一部のように見えます。それはこのように見えます:
No prior disassembly possible
module!getThing:
1d7d4aa0 ?? ???
1d7d4aa1 ?? ???
1d7d4aa2 ?? ???
...
1d7d4b0a 087d1c or byte ptr [ebp+1Ch],bh
1d7d4b0d 8b4004 mov eax,dword ptr [eax+4]
1d7d4b10 8bf9 mov edi,ecx
1d7d4b12 83e11f and ecx,1Fh
1d7d4b15 bb01000000 mov ebx,1
...
では、windbgに残りの分解を示すように説得するにはどうすればよいでしょうか。あるいは、結果を誤解していませんか。 Visual Studio以外にミニダンプをロードできるソフトウェアは他にありますか?
あなたが提供できる洞察をありがとうございました!
回答:
回答№1は2のコピーがあることを確認してください。 同じ シンボルパス内のDLLまたはexeファイル(.sympath
またはexeパス(.exepath
)つかいます !sym noisy
そして .reload
そしてwindbgがこのdllを見つけたことを確認してください。