gpt4 book ai didi

c++ - 查找类迂回函数的对象

转载 作者:行者123 更新时间:2023-11-28 07:33:14 26 4
gpt4 key购买 nike

我已经通过 dll 注入(inject)使用 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

如何从我的 dll 上的 myobj 调用类方法?

最佳答案

这取决于调用约定。您需要检查成员函数在截取的 DLL 中的具体表示方式。在c++端,上面的声明和赋值是错误的,成员函数的类型是:void (MyClass::*)(D3DXVECTOR3&)。如何转换取决于调用约定,但在任何情况下都必须在调用时传递指向 MyClass 对象的指针。

关于c++ - 查找类迂回函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com