使用Hook Engine时的ACCESS_VIOLATION

时间:2012-07-05 15:58:47

标签: c++ sockets hook

使用此钩子引擎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
}

我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:2)

如果您可以自由选择挂钩技术,我推荐使用我们自己的挂钩引擎Deviare,因为它可以处理挂钩复杂性本身(远程过程注入,参数解析,竞争条件),从而提供更高级别的编程接口。它可以在http://www.nektra.com/products/deviare-api-hook-windows/获得,希望它能加快您的解决方案

答案 1 :(得分:0)

根据程序其余部分的实现,您可能会遇到竞争条件,在设置pTrampolineCloseSocket之前可以调用钩子函数。当你崩溃时pTrampolineCloseSocket的价值是多少?