我有一个需求,是获取函数的机器码,但是我直接用函数的地址来读取却读不到,后来听说是虚函数地址。经过研究可以计算出函数的真实地址:
// 计算函数真实地址
unsigned char* funaddr= (unsigned char*)f;//void f(){}
if(funaddr[0]==0xE9)// 判断是否为虚拟函数地址,E9为jmp指令
{
unsigned long realaddr=(unsigned long)f;
realaddr += funaddr[2]*0x100 +funaddr[1] +5;
printf( "函数实际地址:0x%0X/n", realaddr);
}