Я пытаюсь переписать класс из VFTable, я смог
- Получить смещение VFTable, которое содержит указатели на функции
- Получить указатель на нужный экземпляр класса во время выполнения
Я пытаюсь написать класс в своем собственном коде c ++ с возможностью выполнения функций vftable всякий раз, когда мне нужно. Я могу проанализировать все функции, включенные в VFTable, в том же порядке, чтобы сохранить заполнение, но каков правильный синтаксис, чтобы мой класс вызывал функции vftable?
Давайте предположим, что следующий код скомпилирован, и я делаю нет доступа к нему
class BaseA
{
virtual void BaseA1Function(int x, int y);
virtual int BaseA2Function();
}
class BaseB
{
virtual void BaseB1Function(int z);
virtual int BaseB2Function();
}
class MainClass : BaseA, BaseB
{
int someVariable;
}
class Other
{
MainClass* GetBySomeVariable(int _someVariable)//I hooked this
{
//returns MainClass pointer;
}
}
С моим пониманием старых компиляторов создание vftable состоит в том, что у каждого класса будет свой собственный vftable, предполагая, что MainClass имеет свой собственный vftable, который имеет указатели на каждую функцию базовых классов vftable функций.
Мне удалось перехватить GetBySomeVariable () и получить экземпляр MainClass в своем собственном коде следующим образом:
class MyMainClass
{
//I would like to rewrite functions here that can call the vftables functions
//0 BaseA1Function
//4 BaseA2Function
//8 BaseB1Function
//12 BaseB2Function
}
void main()
{
MyMainClass* _instance = //hooking Other::GetBySomeVariable(123);
}
Может кто-нибудь пролить свет?