如何使用 this 作为 mfc 控件正确调用 thiscall 函数

How to properly call a thiscall function with this being an mfc control

所以我有一个注入的 DLL,我正在尝试调用具有以下签名的 thiscall 函数:

int __thiscall sub_76FDF3(CMFCTabCtrl *this, int, int)

据我所知,我可以创建一个函数指针并直接调用它,所以我为该函数创建了一个 typedef:

#include <afxtabctrl.h>

typedef int(__thiscall *TestFuncDef)(CMFCTabCtrl, int, int);
TestFunc = (TestFuncDef)0x76FDF3;

现在我挠头想知道我是否必须找到 'this' 是真正的 tabctrl 然后以某种方式将其转换为 CMFCTabCtrl 以便能够实际调用传递我自己的 int 参数的函数?

这一切都是新问题,如果这是一个愚蠢的问题,我深表歉意。谢谢

你的代码调用 _thiscall 函数是正确的,通过将你的函数指针定义为 __thiscall 并将 this 指针作为第一个参数传递,它会正确地将它放入 ECX 并且一切都应该正常工作只要 this 指针指向正确类型的有效对象。

您需要在内存中找到一个对象并将其地址作为 this 指针传递。如果找不到正确的对象,那么您可以尝试找到正确的构造函数,调用构造函数并将 return 作为您的 this 指针传递。

要找到构造函数,请对 class 的其他虚拟 table 函数进行逆向工程,并尝试找到看起来像是在初始化成员变量的代码行。

如果你想找到真实的对象,你可以挂钩 vtable 函数并复制 this 指针,实质上创建该类型对象的列表。然后您可以尝试使用这些。

您也可以只创建一个大小正确的结构并将其作为 this 指针传递,看看会发生什么,只需确保 vtable 指针指向正确的 vtable 所以这些功能正确解析。有时,如果它不依赖于具有适当值的成员变量,它就可以正常工作。