将整数存储器地址转换为静态成员函数指针

时间:2013-05-23 13:34:20

标签: windows pointers methods hook detours

我试图绕过二进制可执行文件中的成员函数。我只知道函数签名和方法的VA。 借助Detours Express 3.0中包含的'方法'示例,我想出了这个:

class Detour
{
public:
    void mine_target(const char* text)
    {
        printf("text = %s\n", text);
        (this->*real_target)(text);
    }

    static void (Detour::*real_target)(const char* text);
};

void (Detour::*real_target)(const char* text) 
    = (void (Detour::*)(const char*))0x401010;

这给了我错误:

error C2440: 'type cast' : cannot convert from 'int' to 'void (__thiscall Detour:: *)(const char *)'
             There are no conversions from integral values to pointer-to-member values

1 个答案:

答案 0 :(得分:1)

拦截/挂钩功能的技巧不适用于指向成员的指针。根据您的编译器和类设计(继承结构),需要一些额外的字节来表示这些指针的类数据 - 这对于自由函数指针是不必要的。