質問

当社のソフトウェアの 1 つを実行しているときに、テスターは Windows のデータ実行防止ダイアログに直面しました。

デバッグ目的で、開発者のコ​​ンピュータ上でこの状況を再現してみます。成功しませんでした。

DEP 保護によってアプリケーションが強制終了される原因を見つける方法を知っている人はいますか?これに利用できる既存のツールはありますか?

役に立ちましたか?

解決

DEP ダイアログは通常、実行可能としてマークしていない領域からコードを実行しようとした場合にのみ表示されます。これは、使用しているライブラリの「サンク」が原因である可能性があります。ATL ウィンドウ処理。この問題は ATL 8.0 で修正されています。

バッファ オーバーランなどのスタック トラッシュ バグも、リターン アドレスを実行不可能な場所に設定することによって、この問題を引き起こす可能性があります。DEP がプロセスに対してオフになっているか、ハードウェアで利用できない場合、これはアクセス違反ではなく、奇妙な動作を引き起こす可能性があります。

また、C++ 例外をスローするか SEH 例外を発生させ、構造化例外ハンドラーがバッファー オーバーランによって破棄された場合にも発生する可能性があります。

他のヒント

潜在的には、割り当てられていないメモリに書き込もうとすると、常にこのような結果が発生する可能性があると思います。オブジェクトを削除してから使用したり、小さすぎて保持できないバッファに文字列を書き込んだりすることが考えられます。

DEP はハードウェア機能の存在に影響されます。最近、アプリが古いマシンでは正常に動作するが、新しいマシンでは失敗するという状況が発生しました。DEP は古いサーバーと新しいサーバーの両方で有効になっていましたが、新しいサーバーではハードウェア検出が優れていたり、より積極的であったりしたため、クラッシュしたことが判明しました。したがって、QA では再現できても DEV では再現できない場合は、同じハードウェアで試してみてください。QA が開発者よりも新しい/より優れた PC を使用するというのは不合理なように思えますが...完全に信じてますよ!
これに関する最近の経験についての私のメモは次のとおりです。Indy 9 と Windows Server 2003 の間に互換性はありませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top