Найти объект класса исключенной функции

Я обошел метод класса, используя CDetours через инъекцию dll (да я изучаю реверс-инжиниринг) 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 на моей длл?

0

Решение

Это зависит от соглашения о вызовах. Вам нужно проверить, как именно функции-члены представлены в вашей перехваченной DLL. На стороне c ++ вышеприведенное объявление и присваивание неверны, тип функции-члена: void (MyClass :: *) (D3DXVECTOR3&). Как это будет переведено, зависит от соглашения о вызовах, но в любом случае указатель на объект MyClass должен быть передан во время вызова.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]