まず、いくつかの背景:VCで書かれている(私自身のプロセス内でのみ)
私のソフトウェアは++に沿ってロードされますDLLのいくつかの大規模な第三者に依存しています私のアプリで。これらのlibsは、通常の動作中に浮動小数点例外を発生させることがよくありますが、これらの例外をマスクする浮動小数点制御ワードのデフォルト設定のため、ハードウェア例外として通知されないため、プログラムはこれらのためクラッシュしません。
は、今の問題は、 Zeallsoftスーパースクリーンキャプチャのようないくつかのサードパーティ製のプログラムは、ボーランドC++で書かれている、独自のDLLを注入するとき、彼らは浮動小数点例外と理由の私のアプリのクラッシュを有効にするには、FP制御ワードを設定することですそれ。主な問題は、サードパーティのlibと、独自のDLLのを注入されたサードパーティ製のソフトウェアを使用してかもしれませんが、私はまだあるため、このような問題のクラッシュからの私のソフトウェアを保護したいです。私は考えることができる
ソリューションは、私のプロセスの内部で起こってのDLLをロードの通知を取得し、FP制御ワードは、DLLのロードが発生した後の値をデフォルトにリセットされていることを確認してくださいどのようにいくつかにあります。
私はそれを達成するための簡単で効果的な方法を探しています。私のプロセスでDllの負荷が通知される方法はありますか?私がしたいことを達成する他の方法はありますか?私は警戒したい唯一のことは、この方法が勝利2KとWinXPの上で動作し、より高い第二に使用される方法は、潜在的にアンチウイルス/スパイウェアスキャナのマルウェアヒューリスティックを引き起こすことができる性質のものではならないということです。
はい、私はDLLは、FPフラグの状態を復元する必要があることに同意するものとします。しかし、問題はBorland C++がデフォルトでこれらのFPフラグを有効にすることを知っていることであり、人々はそれらを必要としないときに無効にすることはしばしばありません。 – DarthCorder
[ボーランドコンパイラと浮動小数点例外(http://www.virtualdub.org/blog/pivot/entry.php?id=53)。このようなDLLが無効になっているプロセスに注入されると、特に問題になります。 Exception Handlerがインストールされていますが、例外が発生した後にこの状況を処理するのは遅すぎます。私が試したことの1つは、LoadLibraryExをフックしてそこからFPフラグをリセットすることです。 – DarthCorder