【发布时间】:2012-02-12 11:43:16
【问题描述】:
我有一个驻留在应用程序类中的函数,我的目标是将 dll 注入目标进程并通过其地址调用该成员函数。 这是函数:
void GameAudio::StopAllSounds(void) // this is at address 0x004A0656
我试过这样称呼它
typedef void(__stdcall * caller)(void);
caller call = (caller)0x004A0656;
我已经使用了所有东西:__stdcall,__cdecl,__thiscall 你说的。
【问题讨论】:
-
你确定它总是同一个地址吗??
-
当你尝试调用它时会发生什么?您是否尝试过在调试器中单步执行调用?还要记住,所有类成员函数都有一个隐含的
this参数。 -
当我尝试调用它时它只是崩溃
-
@user1205008 - 如果您使用 C++ 语言中提供的各种技术以及良好的设计,则无需通过地址调用成员函数。改为使用覆盖和虚拟成员。
-
您必须了解应用程序使用的 C++ ABI。不幸的是,这是一个非常不可移植的主题,它可能与所使用的编译器 version 一样多。你必须以某种方式传递一个实例指针,但唯一准确的规范是如何做到这一点的是 ABI。
标签: c++ member-function-pointers member-functions