我已经通过 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 上“从”调用类方法?