#include <iostream>
using namespace std;
class A
{
public:
virtual void fun()
{
cout<<1<<endl;
}
virtual void fun2()
{
cout<<2<<endl;
}
};
class B:public A
{
public:
virtual void fun()
{
cout<<6<<endl;
}
virtual void fun2()
{
cout<<4<<endl;
}
};
int main()
{
void(*fun2)(A*);
A *p=new B;
p->fun2();
long lVptrAddr;
memcpy(&lVptrAddr,p,4);
memcpy(&fun2,reinterpret_cast<long*>(lVptrAddr),4);
fun2(p);
delete p;
cout << “Hello World!” << endl;
system(“pause”);
return 0;
}
本人想问下本人怎么样能得到B::fun2()的内容。
using namespace std;
class A
{
public:
virtual void fun()
{
cout<<1<<endl;
}
virtual void fun2()
{
cout<<2<<endl;
}
};
class B:public A
{
public:
virtual void fun()
{
cout<<6<<endl;
}
virtual void fun2()
{
cout<<4<<endl;
}
};
int main()
{
void(*fun2)(A*);
A *p=new B;
p->fun2();
long lVptrAddr;
memcpy(&lVptrAddr,p,4);
memcpy(&fun2,reinterpret_cast<long*>(lVptrAddr),4);
fun2(p);
delete p;
cout << “Hello World!” << endl;
system(“pause”);
return 0;
}
本人想问下本人怎么样能得到B::fun2()的内容。
解决方案
40
至少Windows 上的32Bits的。MSVC编译器
你是不能很好的模拟虚函数,以及成员函数调用的,原因是this 指针是通过寄存器(ecx)传递的
也许只能用二进制代码,或汇编代码来处理,,,也不一定就能做好
你是不能很好的模拟虚函数,以及成员函数调用的,原因是this 指针是通过寄存器(ecx)传递的
也许只能用二进制代码,或汇编代码来处理,,,也不一定就能做好