【问题标题】:How to properly use DetourRemove?如何正确使用 DetourRemove?
【发布时间】: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的第一个参数吗?
  • 不,但我会尝试
  • 好吧,在我尝试完所有的整数都转换成十六进制后,这到底是怎么回事,这对我来说毫无意义
  • 我认为您将不得不详细说明。我不明白你的意思:)
  • 好的,我修好了,我会在下面回复。我传递了错误的论点!

标签: c++ hook detours


【解决方案1】:

修复它。我传递了错误的论点:

DetourRemove(reinterpret_cast<BYTE*>(recv_orig), reinterpret_cast<BYTE*>(recv_hook)

【讨论】:

    猜你喜欢
    • 2020-12-04
    • 2012-07-12
    • 2013-01-21
    • 2021-10-24
    • 2011-12-22
    • 2020-10-14
    • 2015-12-10
    • 2021-01-15
    • 2011-11-04
    相关资源
    最近更新 更多