查找类绕行函数的对象
Find object of class detoured function
我通过dll注入绕过了使用CDetours
的类方法(是的,我正在研究逆向工程)void MyClass::SetData( D3DXVECTOR3& data )
,并且在实际应用程序中一切都工作正常,函数被绕过并且我看到了调试消息(控制台输出)。
现在真正的问题是,我试图使这个函数调用,如果它是一个全局函数,而不是我做:
typedef void (*SetDataFunc)(D3DXVECTOR3&); //for global functions __cdecl is ok
SetDataFunc SetDataRev = (SetDataFunc)0x00428FD0; //just an example address
then call it:
D3DXVECTOR3 data(0,0,0);
SetDataRev(data);
和一切都会正常工作,我的问题是,即使知道MyClass::SetData
的地址并使用上面的方法来调用它(它确实被调用),但是创建的MyClass
对象将保持不变,因为调用本身没有意义,因为你没有从对象调用它。
如
MyClass myobj;
myobj.SetData( data ); //ok any members that 'SetData' changes will be changed.
SetDataRevForClass( data ); //not ok, nothing on 'myobj' changed
我怎么能调用类方法"从"myobj
上我的dll?
这取决于调用约定。您需要检查在截获的DLL中如何精确地表示成员函数。在c++端,上面的声明和赋值是错误的,成员函数的类型是:void (MyClass::*)(D3DXVECTOR3&)。如何转换取决于调用约定,但无论如何,必须在调用时传递指向MyClass对象的指针。
相关文章:
- 如何创建对象函数指针C++映射?
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 如何将对象函数的实例传递给另一个函数
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 将对象函数转换为函数指针
- 非对象函数/类函数C++
- 线程对象函数 C++
- C 将成员对象函数分配给类成员功能
- 使用基本指针调用派生对象函数
- 可以(通过编译器)使用多少个线程来初始化全局对象(函数main之前)
- C++类对象函数
- 对对象::函数的未定义引用
- 无法弄清楚将多个对象函数作为单独的线程调用的语法
- 在提升作用域出口中调用对象函数
- 使用基指针来使用派生对象函数
- 在for_each lambda 中调用对象函数
- C++:: 模板函数 - 从对象函数获取对象的地址
- Qt5 未解析的外部静态元对象函数
- 通过变量使用对象和对象函数