エピソード

アクセス違反 C0000005 - 実行

アクセス実行違反は、アプリケーションが無効なメモリ アドレスからコードを実行しようとしたときに発生します。 有効にするには、メモリ ページに有効な状態、保護およびが必要です。

メモリはMEM_COMMIT 状態である必要があります。

メモリは任意 の型にすることができます。MEM_IMAGE、MEM_MAPPED、またはMEM_PRIVATE。 大多数がMEM_IMAGE。 MEM_PRIVATEは Just-in-Time (JIT) コードに使用されます。メイン例は JavaScript です。

メモリの保護、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、またはPAGE_EXECUTE_WRITECOPYである必要があります。 大多数はPAGE_EXECUTE_READ。 PAGE_EXECUTE_READWRITEとPAGE_EXECUTE_WRITECOPYはまれであり、コードを変更 (挿入) できるため、危険と見なすことができます。

アドレスの状態、保護および種類を表示するには、!address <address を使用します>

違反は、データ実行保護を介してプロセッサによって検出されます。

メモリ アドレスは、次の一般的なシナリオのいずれかが原因で無効である可能性があります。

  • スタック破損 - 呼び出しのリターン アドレスがスタックにプッシュされます。 ローカル変数は、この場所の横にあります。 ローカルにバッファー オーバーランがある場合、リターン アドレスは破損しています。
  • DLL 参照カウント - アドレス は有効でしたが 、DLL がアンロードされた後にアクセスされるようになりました
  • ビット フリップ - 1 つ以上のビットが反転している RAM (ハードウェア) の問題 (まれ)

その他のリソース:

ご意見およびご提案がある場合は、 こちらから問題を送信してください