【发布时间】:2018-01-31 06:43:16
【问题描述】:
我正在尝试挂钩 recv() 函数,并且效果很好。这里没有显示,但是钩子函数将它收到的内容打印到控制台中。
现在,我正在尝试在按键上解开该功能,但它显然不起作用,因为新收到的数据包仍会打印到控制台,因此该功能可能仍处于挂钩状态。我已经尝试切换和更改内容以使 DetourRemove 工作,但如果有人可以提供帮助,我将不胜感激。基本代码如下。
int(__stdcall *recv_orig)(SOCKET s, char *buf, int len, int flags);
int __stdcall recv_hook(SOCKET s, char *buf, int len, int flags)
{
return recv_orig(s, buf, len, flags);
}
///DETOUR
recv_orig = (int(__stdcall *)(SOCKET s, char *buf, int len, int flags))DetourFunction(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook));
///REMOVE
DetourRemove(reinterpret_cast<BYTE*>(GetProcAddress(GetModuleHandleW(L"Ws2_32.dll"), "recv")), reinterpret_cast<BYTE*>(recv_hook));
【问题讨论】:
-
你试过用
recv_orig作为DetourRemove的第一个参数吗? -
不,但我会尝试
-
好吧,在我尝试完所有的整数都转换成十六进制后,这到底是怎么回事,这对我来说毫无意义
-
我认为您将不得不详细说明。我不明白你的意思:)
-
好的,我修好了,我会在下面回复。我传递了错误的论点!