Хук метод, параметры которого содержат неизвестный объект

Я подключил метод члена C ++ через обходы.

Объявление метода извлекается из файла символов (* .pdb) в IDA

LPVOID __thiscall Foo(class UnknownClass, unsigned int, int)

Вот мой метод замены реального

// the first parameter of the method is an unknown class to me
// I don't know its implementation, don't know its size
// so I just declare a dummy class with a enough size
class UnknownClass { public: CHAR dummy[1024]; };

typedef LPVOID (__thiscall MyDummyClass::*PFN_Foo)( UnknownClass, unsigned int, int );

class MyDummyClass
{
public:
// The address of the real method
PFN_Foo m_pfnFoo;

// My method to replace the real one
LPVOID MyFoo( UnknownClass p1, unsigned int p2, int p3)
{
MyDummyClass * pThis = (MyDummyClass*)this;

// call the real one.
// and here the error happens
return (pThis->*m_pfnFoo)( p1, p2, p3 );
}
};

Крюк работает и MyFoo вызывается вместо реального метода. но я получаю ошибку при вызове реального метода:

Run-Time Check Failure #0 - The value of ESP was not properly saved
across a function call. This is usually a result of calling a
function declared with one calling convention with a function pointer
declared with a different calling convention.

Есть ли у вас какие-либо предложения для меня? Как обрабатывать этот вид хуков, когда один из параметров передается как объект, но его реализация мне неизвестна.

1

Решение

Задача ещё не решена.

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

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

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