ライブラリtest.dllをロードするプログラムがあります。このライブラリはws2_32.dllを使用してソケットを作成し、パケットを送受信します。このプロセスに C++ ライブラリを挿入することはできますが、関数「socket」、「accept」などの test.dll 呼び出しを傍受する方法がわかりません。誰でもこの問題で私を助けることができますか? ありがとう!
1 に答える
2
accept関数をフックする必要があります。これは、MS Detoursなどのライブラリを使用して行うことができます(以前のバージョンは無料で、バージョン1.5を使用できます。グーグルで検索してください)。電話
DWORD a=DetourFindFunction("Ws2_32.dll","accept")
それはあなたにaccept関数へのポインタを与えるでしょう。次に、を呼び出すことによってそれを迂回することができます
DetourFunction(a,&Yourfunction)
。
DetourFunctionは新しいポインタを「accept」に戻すので、プログラムがクラッシュしないように、「YourFunction」の最後で必ず呼び出してください。
または、Inlineassemblerを使用して、自分で関数をリダイレクトすることもできます。もちろん、これははるかに複雑です。
于 2012-05-15T16:06:48.893 に答える