ふたみさん、
ほぼ、その通りですが、
「バッファオーバーランと言う現象が「データ領域を実行」することで起こる」のではありません。
話は逆で、バッファオーバーランが起きるとデータ領域で実行することが可能になります。バッファオーバーランはデータ領域での実行が発生する数ある原因の中のひとつということになると思います。
メモリダンプを送られても困るので、代わりに、ふたみさんの AN HTTPD の設定内容を教えてください。regedit で AN HTTPD の設定のところをファイルにしてメールで送ってください。
なお、もちろんこれはふたみさんの設定が悪いというつもりではありません。
malloc や HeapAlloc を使う事が問題なわけではなくて
データ領域、として確保した領域内でプログラムを実行することが問題なのですよね?
プログラムした人がデータ領域でプログラムが動く事をよしとするなら良いのですが
バッファオーバーランと言う現象が「データ領域を実行」することで起こるので
ハードウェア的に、データ領域を実行したなら強制的に止める、のがDEPですよね
プログラマがプログラム領域はプログラム領域として確保するように手続きを変えれば
DEPは本来の「バッファオーバーランを検知」という機能を果たせるわけですよね
対応していただけるなら、何かの際のバッファオーバーランを未然に防げるので
ありがたいことだと思います、気長に待たせていただきます
エラーについてですが、どの領域で出たのか、などの情報は出ないですね
マイクロソフトにメモリダンプを送るか?とは聞かれますが
このデータをマイクロソフトではなく、開発者に渡す方法はありましたっけ?
もし可能でしたら、お渡しいたします
ふたみさん、
引用された記事の内容だけだと誤解をまねくように思います。
大雑把に言うと、DEPでエラーが出たからといって バッファオーバーフローの種があるとは言えません。また、malloc や HeapAlloc を使っているからといって DEPでエラーが出るわけではありません。
けれどもこの種の話は今後も増えるでしょうから対応するようにしますが、結構面倒なのですぐにはできそうもありません。
エラーのウィンドウでアドレスなどの詳細情報が得られるようなら、その内容を教えてもらえるとありがたいです。
当面 DEP の対象から AN HTTPD をはずしておいてください。
起動直後に「コンピュータ保護のため、このプログラムはWindowsにより終了されました。」
と出て、例の「問題が発生したため〜」「送信する、しない」のウィンドウが出ます
基本的にバッファオーバーフローの種を抱えているとこのエラーが出るそうです
データ領域としてマークされたメモリ領域でプログラムが実行されようとすると例外が発生し
メモリの確保の仕方を本来の手続きにのっとった方法に変えると改善されるそうです
記事には
これらのプログラムは,メモリ領域を確保する際,Cランタイム関数のmallocや,Win32 APIのHeapAllocを使ってはいけない。これらの関数はデータ領域としてメモリを確保するからだ。プログラムを格納するためのメモリ領域を確保するには,VirtualAlloc APIにPAGE_EXECUTEなどのフラグを指定して確保する必要がある。
と書かれていました
ふたみさん、
どのアドレスからコード実行されたのかわかりますでしょうか? あるいはどういう時に発生しますか?
その答えにもよりますが、DEPでそのエラーが出るアプリケーションは結構あるようですから、DEP側で対応すべき話なのではないかという気もしますが。。。
WindowsXPのsp2から付いたデータ実行防止(DEP)にてAnHTTPdがエラー検出されます
AMD64の拡張ウイルス防止機能によって実行が遮断されるようです
データ領域の実行など何らかの危険なコードが書かれている可能性があるようです
プログラムの方での対応をお願いできないでしょうか