0

私たちのパートナーの 1 人が、本当に恐ろしい「CodeMeter」を使用して DLL を暗号化するのに適していると判断したため、デバッグできないアプリでクラッシュが発生しました。CodeMeter のライセンスは、CodeMeter で暗号化された DLL を含むアプリをデバッグするすべての試みを防ぎ、未処理の例外フィルターから呼び出された MiniDumpWriteDump が失敗するようにさえ見えます (この手法は、この DLL が読み込まれなくても機能します)。クラッシュは、暗号化された DLL がプロセスに読み込まれたときにのみ発生します。

これをデバッグして、クラッシュしているのが暗号化された DLL かどうかを確認しようとして気が狂いそうになりました。クラッシュしている場合、パートナーに適切な診断情報を提供してこれを解決するにはどうすればよいでしょうか。

任意の提案 - おそらく、未処理の例外フィルターから呼び出すことができる手動のスタックおよびモジュール ウォーキング コードはありますか?

CodeMeter には、パートナーが暗号化されてライセンスが付与されたビルドを作成できるようにするビルド設定がありますが、デバッグをそれほど積極的に妨害することはありませんか?

疑問がある場合に備えて明確にするために、ライセンスをハッキングしようとしているのではなく、このクラッシュを診断するだけです。

4

1 に答える 1

0

例外フィルターに渡された CONTEXT レコードを渡すことにより、SEH または未処理の例外フィルターから呼び出すことができる、適切に機能するスタック ウォーキング コードをいくつか使用しました。

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

この特定のクラッシュは、Visual C++ の例外でした。例外の種類は、SymFromAddr を使用して例外パラメーターの 1 つのアドレスを検索することで明らかになります。

Raymond Chen のブログには、例外パラメーターからVisual C++ 例外の型を見つけるためのコードがいくつかありますが、何らかの理由 (おそらく自分のエラー) でこれを機能させることができませんでした。

于 2012-04-11T11:00:55.523 に答える