我一直在编程最近的弯路和所有的它。我绕道了很多不同的功能; 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 }
}
所以我不知道基方法获取的是否叫或者是否能以某种方式被钩住?请问功能exectution跳直接到Lamborghini::Drive
或是否以某种方式通过Car
类,所以它的检测,只要一个电话后裔Drive
?
编辑:如果基类函数是空的,它甚至可以挂钩它,因为它需要5个字节的空间?
http://en.wikipedia.org/wiki/Virtual_method_table也是这可能帮助,因为它你描述:http://code.google.com/p/ gmodmodules/source/browse/trunk/gm_slog/gm_slog/vfnhook.h?spec = svn74&r = 74 –