0

Deviare V2 API を使用して、テスト アプリケーションからの winapi 呼び出しをインターセプトしたいと考えています。問題は、フックとシステム コールが同じプロセスにあることです。このため、呼び出しはインターセプトされません。

それぞれに対して個別のプロセスを開くと、インターセプトが機能します。他の誰かがこのシナリオ/問題を経験したことがありますか?

問題は、コードの平和にいくつかの単体テストを追加しようとしているということです。既存の製品コードを変更してすべてのシステム コールをラップ/モックする代わりに、このすべての呼び出しを単純にインターセプトして、必要に応じて偽造できると考えました。

4

1 に答える 1

2

実際には、独自のプロセスで API をフックする方がはるかに簡単です (実際、別のプロセスをフックする場合は、とにかくそのプロセスに DLL を挿入する必要があるため、基本的に独自のプロセスをフックする場合は、その手順をスキップできます)。使用しているライブラリのバグである可能性があります。Microsoft Detours を試すか、自分でメモリにパッチを当ててください。実際にはそれほど難しくありません。このテーマに慣れていない場合は数時間かかります。

注意が必要なのは、一部の C++ コンパイラは場合によっては (デバッグ ビルドだと思います)、ジャンプ スタブなどを使用し、フック プロセスに干渉する可能性があることです。その場合、フックするときに特別な注意を払う必要があります - MS Detours はおそらくこれを適切に行います。成功に影響する場合は、デバッグ/リリース ビルドを試すことができます。つまり、API の適切なアドレスを取得するということです。関数が WinAPI の場合のように DLL 内にある場合、LoadLibrary と GetProcAddress を使用すると、正しいアドレスを取得していることを確認できます。

余談ですが、APIフックは、テスト用のモック/スタブを回避するための適切な方法ではないと思いますが、機能するはずです。

フッキングがどのように機能するかについてもっと興味がある場合は、ここで私の論文をチェックしてください: http://lkm.fri.uni-lj.si/zoranb/research/berdajs-bosnic%20SPE%202011.pdf

于 2012-11-09T11:36:26.087 に答える