【发布时间】:2014-04-18 10:26:49
【问题描述】:
我试图绕过应用程序中的一个函数。我有它的来源。
class Foot : public Something, public SomethingElse {
public:
Foot( double SomethingAgain, double Somethings,
Blahblah *AnotherThing = NULL );
virtual ~Foot();
virtual void detourmepls( const char *ARGUMENT );
};
这是在头文件中定义的。
这是我用来定义它的,所以我会使用正确的地址从我的 dll 中调用它。
void (__cdecl* detourmepls)(const char *stuff);
这个虚拟 void 函数的真正调用约定是什么?
感谢任何帮助。
新的编辑和信息:
我正在使用 MS Detours 1.5
detourmepls = (void(__thiscall*)(void *Pthis,void *Unknown,const char *))DetourFunction((PBYTE)ADDRESS, (PBYTE)hookedFunction);
这就是我尝试绕道的方式(它非常混乱。)
【问题讨论】:
-
我假设您将函数作为 C 回调传递,这是不可能的。如果注册回调函数允许传递用户数据,请编写一个静态函数并将其与“this”指针一起传递给注册函数。
-
你遇到了什么错误?
-
当我尝试调用原始函数时应用程序崩溃。
-
你使用微软的弯路吗?如果是这样,这可能是相关的,因为您正在尝试取消非静态成员函数:stackoverflow.com/questions/11048176/… BTW 如果您发布更多代码(如何挂钩函数以及如何尝试调用它等),您可以获得更多帮助...)
标签: c++ windows calling-convention abi