c++ - 如何使用 DetourAttach() 作为指向十六进制函数的指针?

标签 c++ detours

我正在尝试使用绕行库制作教程。

在旧版本的绕行库 v1.5 中,函数 DetourFunction 用于定义地址,因此 DLL 知道在哪里寻找该函数。

例如,它可以按如下方式使用:

         InsertDateTime = (int (__stdcall*)(int))DetourFunction((PBYTE)0x01006F10,       (PBYTE)MyInsertDateTime)

参见 http://www.moddb.com/groups/ibepex/tutorials/function-hooking

但是在较新的版本中,该功能已更改为

     LONG DetourAttach(
        PVOID * ppPointer,
        PVOID pDetour
     );

其中 ppPointer 是指向目标指针的指针,绕行将附加到该目标指针。

既然我知道目标函数的十六进制格式地址 0x01006F10,我想以某种方式将它用作 ppPointer 的参数。我试着写:

               InsertDateTime = (int (__stdcall*)(int))DetourAttach((PVOID*)0x01006F10, MyInsertDateTime);

它编译得很好,但我的程序并没有像我想的那样工作。程序似乎从未从该地址捕获函数。

所以基本上我的问题是,我是否正确使用了指向十六进制地址的指针,其次,我在使用 DetourAttach() 的方式上是否存在一些基本错误?

最佳答案

您错误地使用了 DetourAttach。在您的案例中正确的用法是:

int(__stdcall* InsertDateTime)(int) = (int(__stdcall*)(int))(0x01006F10);

LONG errorCode = DetourAttach((PVOID*)(&InsertDateTime), (PVOID)MyInsertDateTime);
if(!errorCode) {
    //Detour successful
}

请注意,在像 ASLR 这样的技术存在的情况下;你应该使用类似 GetProcAddress 的东西在运行时检索函数的地址,否则可能会导致损坏或崩溃。

关于c++ - 如何使用 DetourAttach() 作为指向十六进制函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16981225/

相关文章:

c++ - 为什么Qt设计器生成的对象总是分配在堆中?

c++ - 如何删除句子开头的空格。

c++ - 如何防止将整数分配给 char 字符串?

c++ - Deviarev2 Hook API : Hook into existing process winapi calls?

c++ - Hook ExtTextOut 返回意外结果

c++ - 用MS绕弯路防止winsock注入(inject)

delphi - 如何修补 TControlCanvas.CreateHandle(FreeDeviceContexts 问题)?

c++ - 如何删除在另一个函数中初始化的动态分配的数组?

一个简短的例子没有分配被释放的c++指针

c - 使用 JMP 指令 API Hook 失败