修改A的虚函数表, 用自定义的函数funEx进行替换后 希望能够访问实际调用funEx的A的对象指针
#include <iostream>
#include <windows.h>
using namespace std;
class A
{
public:
virtual void fun()
{
cout << "class A" << endl;
}
void setId(int num)
{
m_nId = num;
}
int getId() const
{
return m_nId;
}
private:
int m_nId;
};
void funEx()
{
int idnum(0);
//idnum = this->getId(); //这里怎么获得调用本函数的A对象指针?
cout << "class A, id: " << idnum << endl;
}
int main()
{
A* pA1 = new A;
pA1->setId(1);
A* pA2 = new A;
pA2->setId(2);
int* vtf = (int*)*(int*)(pA1);
int oldFun = vtf[0];
DWORD old;
VirtualProtect(vtf, 4, PAGE_READWRITE, &old);
vtf[0] = (int)funEx;
VirtualProtect(vtf, 4, old, &old);
pA1->fun();
pA2->fun();
}
最终理想的输出应该是
class A, id: 1
class A, id: 2