вот код подмены виртуальной функции(кажется даже работает):
class A
{
public:
virtual void foo() = 0;
virtual ~A(){}
};
class B: public A
{
public:
virtual void foo() { std::cout << "B::foo" << std::endl; }
virtual ~B() {}
};
void Foo(B*)
{
std::cout << "Foo" << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
B b;
void *** v = reinterpret_cast<void***>(&b);
**v = &Foo;
A* a = &b;
a->foo();
return 0;
}
Код работает, НО при загрузке кода в память, область памяти, где хранятся виртуальные функции помечается, как RO так что все потуги идут лесом, вроде можно это обойти, но лично мне такие грязные хаки не нравятся, я не вижу не одной причины, так делать.