如何正确调用 thiscall 函数,并将其作为 mfc 控件
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 指针传递。 如果找不到正确的对象,则可以尝试找到正确的构造函数,调用构造函数并将返回值作为this指针传递。
若要查找构造函数,请对该类的其他虚拟表函数进行反向工程,并尝试查找看起来像是在初始化成员变量的代码行。
如果要查找真实对象,可以挂接 vtable 函数并复制 this 指针,实质上是创建该类型的对象列表。 然后,您可以尝试使用这些。
您也可以创建一个大小大致正确的结构,并将其作为 this 指针传递并查看会发生什么,只需确保 vtable 指针指向正确的 vtable,以便这些函数正确解析即可。 有时,如果它不依赖于具有正确值的成员变量,则此方法可以正常工作。
相关文章:
- 双击更改 mfc 中列表控件中的行的颜色
- 如何在MFC中的静态文本控件上插入图标?
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- MFC CEdit 控件在添加到加速器后不处理按键
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 当鼠标悬停在 MFC C++ 中列表控件的列标题上时,可视显示工具提示
- 在 MFC C++中悬停列表控件的列标题的可视化显示工具提示
- 如何正确调用 thiscall 函数,并将其作为 mfc 控件
- MFC 工作表 - 如何增加树控件的宽度?
- MFC 用于计算控件的高光、阴影等的算法或函数是什么?
- 在 MFC 中,当 CEdit 控件达到最大字符数时,退格键不起作用
- MFC GUI 自定义控件:如何绘制光标更新以响应鼠标移动?
- 如何在鼠标点找到MFC控件的手柄,但位于其他控件下
- MFC控件中的Unicode支持
- 检测 MFC 控件的宽度是否不足以容纳文本(文本将被截断)
- 更改编辑 mfc 控件文本
- 如何使用消息访问 MFC 控件
- 对话框上的 MFC 控件在鼠标移到它们上之前不会显示
- 如何从工作线程访问MFC控件
- 将 MFC 控件传递给线程或传递句柄