Я пишу 64-битную Windows DLL-библиотеку, используя MSVS, которая загружается сторонним исполняемым файлом. Сторонний exe имеет API, который включает в себя некоторые классы с чисто виртуальными функциями. Пример:
//3rdPartyAPI.h
class foo
{
virtual void doWork() = 0;
};
__declspec(dllimport) foo* GetFOO(); //returns an instance of foo created by the executable that I can access
Как только моя DLL загружена, я могу вызвать doWork из своего собственного кода следующим образом:
GetFOO()->doWork();
Однако я хочу использовать библиотеку обходов Microsoft для перехвата вызовов doWork и вызвать мою собственную функцию "doMyWork". Пока что, вручную пройдя виртуальную таблицу «foo» во время выполнения, я смог найти индекс виртуальной таблицы doWork (методом проб и ошибок), а затем оттуда я могу получить его адрес и использовать этот адрес в вызове. в DetourAttach и объезд работает как задумано.
Но я хотел бы знать: есть ли способ программно (во время выполнения) найти индекс / адрес vtable чистой виртуальной функции?