我有一个需求,是获取函数的机器码,但是我直接用函数的地址来读取却读不到,后来听说是虚函数地址。经过研究可以计算出函数的真实地址:
// 计算函数真实地址
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);
}
本文介绍了一种通过函数地址计算其真实内存地址的方法,特别是针对虚函数的情况。通过检查特定的机器码指令(如jmp指令),可以判断一个地址是否指向虚函数,并进一步计算出其真实的函数地址。
1964

被折叠的 条评论
为什么被折叠?



