0

CDetoursdllインジェクションを使用してクラスメソッドを迂回しました(はい、リバースエンジニアリングを勉強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

myobjdll でクラス メソッドを「から」呼び出すにはどうすればよいですか?

4

1 に答える 1