我一直在編程最近的彎路和所有的它。我繞道了很多不同的功能; 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 –