Найти верхнюю границу размера vtable во время выполнения

Виртуальная таблица класса c ++ зависит от количества определенных виртуальных функций.
Есть ли у вас мысли, как получить верхнюю границу размера V-таблицы во время выполнения?

Скажем, у меня есть указатель на объект, я знаю его общедоступные виртуальные функции из файла заголовка, но я не уверен, сколько существует защищенных / частных виртуальных функций.

Одна мысль в моей голове — последовательно читать по виртуальной таблице, пока:

  1. У меня есть нарушение доступа, тогда это может быть верхняя граница размера vtable.
  2. Это NULL (но NULL также может быть чисто виртуальной функцией).

Редактировать:

Ранее у меня возник вопрос здесь: C ++ COM Object Hotpatching?

Я не получил удовлетворительного ответа. Таким образом, я придумываю способ себя, который должен взломать указатель vtable.

Я хочу добавить переменную к объекту c ++ во время выполнения. Хотя единственное, что я знаю об объекте, это то, что у него есть указатель vtable. Чтобы добавить это поле, я планирую указать указатель vtable в другое место, где я храню копию его vtable. И в восходящем потоке этой новой таблицы я храню свою добавленную переменную. Это единственное решение, которое я могу придумать.

Решение оборачивания небезопасно, так как для COM-объектов проблема будет возникать, если у объекта много интерфейсов и вызывается queryInterface.

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

2

Решение

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

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

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

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