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 回答