私は最近、迂回路とそれに付随するすべてのものでプログラミングしてきました。私は多くの異なる機能を迂回してきました。 thiscall、stdcall、cdecl、仮想関数などです。しかし、私が管理していない(可能ではないかもしれない)ことがあり、それは基本クラスの仮想関数をフックすることです。例えば;仮想関数(空)を宣言するCarクラスがありますDrive
。その後、車を継承し、Drive
を実装する他の3つのクラスがあります。仮想関数と迂回
私は、彼らがないコール基本機能をすれば、彼らは、Drive
トリガーとき、それはCar
の子孫によってトリガーされるだろう(簡単な「JMP」フックを使用して)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 }
}
をだから私は基本メソッドは、それが何らかの形でフックすることができるかどうかは、またはと呼ばれる取得するかどうかを思ったんだけど?関数の実行がに直接からLamborghini::Drive
にジャンプするか、どういうわけかCar
クラスを通過するので、子孫がDrive
を呼び出すたびに検出可能ですか?
EDIT:基本クラスの関数が空の場合、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 –