1

このフック エンジンの使用に問題があります http://www.codeproject.com/Articles/21414/Powerful-x86-x64-Mini-Hook-Engine

関数は正しくフックされていますが、実際の関数 (オリジナル) を呼び出そうとすると、ACCESS_VIOLATION エラーが発生します。

私のコード

typedef int (__stdcall *MyCloseSocket) (SOCKET s);
MyCloseSocket pTrampolineCloseSocket = NULL;

    int main()
    {
     //...
      HookFunction((ULONG_PTR) GetProcAddress(LoadLibrary(dll), "closesocket"),  (ULONG_PTR) &OwnCloseSocket); 
      pTrampolineCloseSocket = (MyCloseSocket) GetOriginalFunction((ULONG_PTR) OwnCloseSocket);
    }

int OwnCloseSocket(SOCKET fd)
{
        // here successfully. Function is hooked
    return pTrampolineCloseSocket(fd); // but here ACCESS_VIOLATION
}

私が間違っているのは何ですか?ありがとう!

4

2 に答える 2

2

フッキングのテクノロジーを自由に選択できる場合は、独自のフッキング エンジン Deviare をお勧めします。これは、フッキングの複雑さ自体 (リモート プロセス インジェクション、パラメーター解析、競合状態) を処理して、より高いレベルのプログラミング インターフェイスを提供するためです。http://www.nektra.com/products/deviare-api-hook-windows/で入手できます。

于 2012-07-06T17:48:14.040 に答える
0

プログラムの残りの実装によっては、フック関数がpTrampolineCloseSocket設定される前に呼び出される可能性のある競合状態が発生する可能性があります。pTrampolineCloseSocketあなたがクラッシュしたときの価値は何ですか?

于 2012-07-05T18:38:46.147 に答える