0

アプリケーションのクラッシュを把握しようとしています。WinDbgは私に次のことを教えてくれます:(アンダースコアの代わりにダッシュを使用)


LAST-CONTROL-TRANSFER:005f5c7eから6e697474
DEFAULT-BUCKET-ID:BAD_IP
BUGCHECK-STR:ACCESS-VIOLATION

6e697474が有効なアドレスではないことは私には明らかです。

3つの質問があります:
1)「BAD_IP」バケットIDは「BadInstructionPointer」を意味しますか?
2)これはマルチスレッドアプリケーションであるため、1つの考慮事項は、関数を呼び出そうとしたオブジェクトがスコープ外になったことです。それが同じエラーメッセージにつながるかどうか誰かが知っていますか?
3)他に何がこのようなエラーを引き起こす可能性がありますか?私の同僚の1人は、これがスタックオーバーフローの問題である可能性があることを示唆しましたが、過去のWinDBGは、これらを検出して指摘するのにかなり信頼できることが証明されています。(それを診断するためにバックグラウンドで実行されるブードゥーについては確信が持てません)。

4

3 に答える 3

2

Bad-IPは不正な命令ポインタです。あなたの問題の説明から、私はそれがスタックオーバーフローではなくスタック破損であると思います。

于 2008-09-25T00:00:51.243 に答える
0

可能性の高い順に、無効なアドレスにジャンプする可能性のある次のことを考えることができます。

  • 割り当て解除されたオブジェクトでメンバー関数を呼び出す。(あなたが疑うように)
  • 破損したオブジェクトのメンバー関数を呼び出します。
  • 破損したvtableを持つオブジェクトのメンバー関数を呼び出す。
  • コードスペースを上書きするルージュポインタ。

005f5c7eのコードを見つけて、その周辺でアクセスされているオブジェクトを確認することから、デバッグを開始します。

于 2008-09-25T00:06:38.703 に答える
0

この場所に文字列「ttie」を何が書いたのでしょうか。多くの場合、0x41-0x5A、0x61-0x7A([a-zA-Z])の範囲のバイトがある場合、それは文字列バッファオーバーフローを示します。

実際に上書きされたのは、差出人住所、使用している他の関数ポインター、またはvfptrオブジェクト内の仮想関数テーブルポインター()が文字列の途中を指すように上書きされた場合です。

于 2008-09-25T13:07:57.607 に答える