Виртуальная таблица класса c ++ зависит от количества определенных виртуальных функций.
Есть ли у вас мысли, как получить верхнюю границу размера V-таблицы во время выполнения?
Скажем, у меня есть указатель на объект, я знаю его общедоступные виртуальные функции из файла заголовка, но я не уверен, сколько существует защищенных / частных виртуальных функций.
Одна мысль в моей голове — последовательно читать по виртуальной таблице, пока:
Редактировать:
Ранее у меня возник вопрос здесь: C ++ COM Object Hotpatching?
Я не получил удовлетворительного ответа. Таким образом, я придумываю способ себя, который должен взломать указатель vtable.
Я хочу добавить переменную к объекту c ++ во время выполнения. Хотя единственное, что я знаю об объекте, это то, что у него есть указатель vtable. Чтобы добавить это поле, я планирую указать указатель vtable в другое место, где я храню копию его vtable. И в восходящем потоке этой новой таблицы я храню свою добавленную переменную. Это единственное решение, которое я могу придумать.
Решение оборачивания небезопасно, так как для COM-объектов проблема будет возникать, если у объекта много интерфейсов и вызывается queryInterface.
И идея сохранить новую переменную в карте будет включать чтение карты каждый раз, когда к переменной обращаются.
Задача ещё не решена.
Других решений пока нет …