Мне удалось зацепить все, что я хотел (функции API, виртуальные методы, «стандартные» функции), но мне интересно, как подключить функцию (тип) класса-класса не-виртуальный. Чтобы подключить виртуальный метод, вам просто нужно получить VTable и исправить его (или скопировать, изменить и сменить VPointer). Однако, когда метод НЕ виртуальный, нет VTable.Hooking non-virtual class member function
Прежде всего, как я могу получить адрес метода Я хочу подключить от своего имени ? Я не могу использовать GetProcAddress()
, так как функция не экспортируется. Кажется, что единственный способ поиска байтового шаблона в памяти, соответствующей функции. Затем, как только я получил адрес, как его подключить? Использование базового метода (JMP)? Что делать, если я хочу подключить только один экземпляр? Я думаю, что я проверю свою функцию подключения: если это правильный экземпляр, тогда сделайте то, что нужно сделать, иначе просто выполните его, не делая ничего другого.
На самом деле я ищу лучшие решения, потому что я думаю, что те, что были выше, будут работать, но они не очень «аккуратные», не так ли?
спасибо.
Я не знаю много о 'WinAPI', но вы можете взять адрес члена-функции с помощью' & ИмяКласса :: member_name' синтаксис. – pmr
Предположим, что 'ClassName' не является частью библиотеки, которую я могу включить # в моей DLL (которую я хочу добавить), но вместо этого это класс, определенный в программе, которую я хочу подключить: я не могу написать' & ClassName: member_name' в моей DLL, я получу ошибку компиляции. – GuiTeK