2012-04-02 5 views
0

私たちのパートナーの1人が真に使用するのに適していると私たちはデバッグできないアプリでクラッシュしました恐ろしい 'CodeMeter'彼らのDLL。 CodeMeterのライセンスは、CodeMeterで暗号化されたDLLを含むアプリケーションをデバッグしようとする試みをすべて防ぎ、未処理の例外フィルタから呼び出されたMiniDumpWriteDumpが失敗するように見えます。クラッシュは、暗号化されたDLLがプロセスにロードされるときにのみ発生します。アンチ・デバッガ対策を含むプロセスでクラッシュをデバッグする方法

私はこれをデバッグし、それがクラッシュの暗号化されたDLLのかどうかを確立しようとしている狂った、と私はこれを解決するために、当社のパートナーに十分な診断情報を提供することができますどのようにもしています。

任意の提案 - おそらくいくつかの手動スタックおよびモジュール歩行コードは、私は私の未処理の例外フィルタから呼び出すことができますか?

んCodeMeterは、私たちのパートナーがまだ暗号化され、ライセンスが、そう積極的にデバッグを妨害しないされたビルドを生成することができますビルド設定を持っていますか?

任意の疑いがあります場合にだけ明確にするために、私はこのクラッシュを診断、ライセンスをハックしようとしていませんよ。

+0

CodeMeterは他のDbgHelp.dll関数も無効にしているようです。 SymInitializeは、このCodeMeter暗号化DLLの存在下でも失敗します。それは私に、この__poisonous__ CodeMeterソフトウェアが秘密裏切りに選ばれたコアオペレーティングシステムの他の部分を疑問に思います... – persiflage

+0

CaptureStackBacktraceを使用してスタックを歩くサンプルコードが見つかりました。これは例外フィルタの呼び出しスタックを表示するだけで、例外自体は表示されません。 – persiflage

+0

__try __exceptを使用して、暗号化されたDLLから例外の詳細をキャッチしてログに記録できました。 CaptureStackBacktraceを使用してもSEH例外フィルタから有効なスタックトレースを取得できません。 – persiflage

答えて

0

私は、例外フィルタに渡されたCONTEXTレコードを渡すことによって、SEHまたは未処理の例外フィルタから呼び出せる、うまく動作するstack walking codeを使用しました。

スタックにアドレスして、最初のいくつかの例外パラメータの電位アドレスは、モジュールハンドルを含むSymFromAddr in DbgHelpを使用して解釈することができます。これにスタックファイルのアドレスと関連するDLLを解釈するためのモジュールファイル名とモジュールハンドルのlogを追加します。

この特定のクラッシュは、Visual C++例外でした。例外のタイプは、SymFromAddrを使用して例外パラメータの1つのアドレスをルックアップすることによって明らかにされます。

Raymond Chenのブログには例外パラメータのコードfinding the type of a Visual C++ exceptionがありますが、何らかの理由で(おそらく私自身のエラー)私にはうまく行けませんでした。

関連する問題