私たちのソフトウェアの 1 つを実行しているときに、テスターは Windows のデータ実行防止ダイアログに直面しました。
デバッグ目的で開発者のコンピューターでこの状況を再現しようとしましたが、成功しませんでした。
DEP 保護がアプリケーションを強制終了する原因を見つける方法を知っている人はいますか? これに使用できる既存のツールはありますか?
通常、DEP ダイアログは、実行可能としてマークしていない領域からコードを実行しようとしたときにのみ表示されます。これは、使用しているライブラリ (ATL ウィンドウなど) の「サンク」が原因である可能性があります。この問題は、ATL 8.0 で修正されています。
スタック トラッシング バグ (たとえば、バッファー オーバーラン) も、戻りアドレスを実行できない場所に設定することによって、この問題を引き起こす可能性があります。DEP がプロセスに対してオフになっているか、ハードウェアで使用できない場合、これはアクセス違反を引き起こさない可能性がありますが、代わりに奇妙な動作を引き起こす可能性があります。
C++ 例外をスローするか、SEH 例外を発生させ、構造化された例外ハンドラーがバッファー オーバーランによって破棄された場合にも発生する可能性があります。
DEP は、ハードウェア機能の存在によって影響を受けます。最近、アプリが古いマシンでは問題なく動作したが、新しいマシンでは失敗するという状況がありました。古いサーバーと新しいサーバーの両方で DEP が有効になっていましたが、ハードウェアの検出がより優れていたり、より積極的だったりしたため、新しいサーバーでクラッシュしたことが判明しました。したがって、QA が再現できても DEV が再現できない場合は、同一のハードウェアで試してみてください。
これに関する最近の経験に関する私のメモは次のとおり
です。 Indy 9 と Windows Server 2003 の間に非互換性はありますか?
潜在的に、割り当てられていないメモリに書き込もうとすると、これが考えられる結果になると思います。オブジェクトを削除してから使用したり、小さすぎて保持できないバッファに文字列を書き込んだりするようなものです。