2

クライアントが私の会社のプログラムを実行していますが、どこかに到達する前に停止しています。彼らは、Windows イベント ログから次の情報を送信しました。

faulting module program.exe, version 1.2.3.4, fault address 0x00054321.

他にやるべきことはあまりないので、最後の努力として、その位置が逆アセンブラーのどこにあるかを見つけられるかどうかを確認しようとしています。Visual Studio でプログラムを実行し、一時停止し、[逆アセンブリ] ウィンドウを見て、そのアドレスまでスクロールしようとしましたが、そこに表示されるのは次のとおりです。

00054321  ???              
00054322  ???              
00054323  ???              
00054324  ???              
00054325  ???              
00054326  ???              
00054327  ???              
00054328  ???              
00054329  ???              
0005432A  ???              

これは、Visual Studio が一時停止位置付近の EXE の一部のみを逆アセンブルするためでしょうか? スクロールバーが完全に機能しないため、実際にどれだけ分解されているかを確認するのは困難です。(スクロール位置をつかんで移動することはできません。行ごとまたはページごとにスクロールする必要があります。)

あなたが持っているかもしれない洞察をありがとう!

4

3 に答える 3

2

障害アドレスは、スタックの破損の問題によっても発生する可能性があります。戻りアドレスが危険にさらされ、間違ったアドレス @ 0x54321 に戻る可能性があります。また、使用されているテクノロジ (Java、.NET) によっては、コードの位置が実行ごとに変わる可能性があります。

Visual Studio は、プロセス空間全体を逆アセンブルします。???? 位置にアクセスできないことを意味します。

コア ダンプから何が起こっているかを確認するには、スタック フレームが必要です。

于 2009-01-29T21:36:51.510 に答える
2

WinDbg はここであなたの友達かもしれません。QbProg が言うように (ミニ) ダンプを取得できれば、実行可能ファイルとシンボル (.pdb) をロードできます。しかし、WinDbg でこれを行う方が簡単だった経験があります。

于 2009-01-29T21:40:16.090 に答える
1

逆アセンブル ウィンドウに何が表示されることを期待していますか? このアプローチは機能しません。クライアントが実行しているものとまったく同じビルド構成を再構築できる場合は、プロジェクトのリンク オプションで/MAPオプションを有効にできます。これにより、シンボルをアドレスにマップするファイルが作成され、クラッシュが発生したときに実行されていた関数を確認できます。モジュールがクライアントの PC にロードされたアドレスに対して生のマップされたアドレスをオフセットするために、少し計算を行う必要がある場合があります。

Fredrik が言うように、特にクライアントの PC からクラッシュ ダンプを取得できる場合は、WinDbg も役立つ可能性があります。

于 2009-01-29T21:54:01.087 に答える