エピソード
アクセス違反 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 を使用します>
- 必ず現在の値を参照してください。割り当て値ではありません
- 各メモリ ページ領域 (最小 4K) は、VirtualProtect 関数ファミリによって設定された、割り当て時の初期保護値と現在の保護値の両方を追跡します。
違反は、データ実行保護を介してプロセッサによって検出されます。
メモリ アドレスは、次の一般的なシナリオのいずれかが原因で無効である可能性があります。
- スタック破損 - 呼び出しのリターン アドレスがスタックにプッシュされます。 ローカル変数は、この場所の横にあります。 ローカルにバッファー オーバーランがある場合、リターン アドレスは破損しています。
- DLL 参照カウント - アドレス は有効でしたが 、DLL がアンロードされた後にアクセスされるようになりました
- ビット フリップ - 1 つ以上のビットが反転している RAM (ハードウェア) の問題 (まれ)
その他のリソース:
アクセス実行違反は、アプリケーションが無効なメモリ アドレスからコードを実行しようとしたときに発生します。 有効にするには、メモリ ページに有効な状態、保護、および型が必要です。
メモリは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 を使用します>
- 必ず現在の値を参照してください。割り当て値ではありません
- 各メモリ ページ領域 (最小 4K) は、VirtualProtect 関数ファミリによって設定された、割り当て時の初期保護値と現在の保護値の両方を追跡します。
違反は、データ実行保護を介してプロセッサによって検出されます。
メモリ アドレスは、次の一般的なシナリオのいずれかが原因で無効である可能性があります。
- スタック破損 - 呼び出しのリターン アドレスがスタックにプッシュされます。 ローカル変数は、この場所の横にあります。 ローカルにバッファー オーバーランがある場合、リターン アドレスは破損しています。
- DLL 参照カウント - アドレス は有効でしたが 、DLL がアンロードされた後にアクセスされるようになりました
- ビット フリップ - 1 つ以上のビットが反転している RAM (ハードウェア) の問題 (まれ)
その他のリソース: