我最近一直在绕弯路编程,以及随之而来的一切。我绕了很多不同的功能;thiscall、stdcall、cdecl、虚函数等。但是有一件事我没有管理(这甚至可能是不可能的),那就是挂钩一个基类虚函数。例如; 有一个 Car 类,它声明了一个虚函数(空)Drive
。然后还有其他 3 个 car 类继承了 car 和 implements Drive
。
如果我挂钩 Car 的(基类)Drive
函数(使用简单的 'jmp' 挂钩),如果他们不调用基函数,它会在触发时由 的后代Car
触发吗?Drive
更彻底地解释:
class Car
{
virtual void Drive(void) { } // Empty virtual function
}
class Lamborghini : public Car
{
void Drive(void) { // does lots of stuff, but does NOT call base function }
}
所以我想知道是否调用了基本方法 get 或者是否可以以某种方式挂钩?函数执行是直接跳转到Lamborghini::Drive
还是以某种方式通过Car
类,以便在后代调用时可以检测到Drive
?
编辑:如果基类函数为空,是否甚至可以挂钩它,因为它需要 5 个字节的空间?