【发布时间】:2012-05-08 12:23:09
【问题描述】:
我最近一直在绕弯路编程,以及随之而来的一切。我绕了很多不同的功能; thiscall、stdcall、cdecl、虚函数等。但是有一件事我没有管理(这甚至可能是不可能的),那就是挂钩一个基类虚函数。例如;有一个 Car 类声明了一个虚函数(空)Drive。然后还有其他 3 个汽车类继承了汽车并实现了Drive。
如果我钩住汽车的(基类)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 个字节的空间?
【问题讨论】:
标签: c++ gcc virtual-functions detours