Можно ли без извращений добыть фактический адрес виртуальной функции?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.10.19 17:12
Оценка:
Хочется в MSVC++ по выражению для вызова виртуальной функции (например, Obj->Func) получить ее фактический адрес, лежащий в vtable, на который при вызове выполняется call. Сравнительно честные методы получения адреса члена в C++ предполагают уточнение имени функции именем класса, что предполагает обращение к статической vtable, созданной для класса (у конкретного объекта она может быть подменена). А если лезть руками в vtable, то нужно знать порядковый номер функции. Без этих извращений никак?
vtable адрес виртуальная функция метод
Re: Можно ли без извращений добыть фактический адрес виртуальной функции?
От: kov_serg Россия  
Дата: 14.10.19 03:07
Оценка: +1 :))
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Хочется в MSVC++ по выражению для вызова виртуальной функции (например, Obj->Func) получить ее фактический адрес, лежащий в vtable, на который при вызове выполняется call. Сравнительно честные методы получения адреса члена в C++ предполагают уточнение имени функции именем класса, что предполагает обращение к статической vtable, созданной для класса (у конкретного объекта она может быть подменена). А если лезть руками в vtable, то нужно знать порядковый номер функции. Без этих извращений никак?

Шо опять? Штатными методами — никак.
Re[2]: Можно ли без извращений добыть фактический адрес виртуальной функции?
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.10.19 09:51
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Штатными методами — никак.


Грустно. Что показательно, даже MS, давно сделавшая и периодически обновляющая библиотеку Detours для перехвата различных API, не озаботилась сделать у себя в компиляторе такую возможность, хотя работы на копейку...

По сути, и нештатными методами, кроме трассировки кода, тоже никак.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.