Переписывающий класс из VFTable c ++ - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь переписать класс из VFTable, я смог

  1. Получить смещение VFTable, которое содержит указатели на функции
  2. Получить указатель на нужный экземпляр класса во время выполнения

Я пытаюсь написать класс в своем собственном коде 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);
}

Может кто-нибудь пролить свет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...