关于虚函数地址的问题
来源:互联网 发布:推理小说流行知乎 编辑:程序博客网 时间:2024/05/02 08:48
看到别人的文章,知道虚函数列表存在于虚函数所在类的实例对象里,并且地址是第一个。所以可以通过实例对象找到虚函数列表,从而找到虚函数列表中的虚函数。
#include <iostream>using namespace std;class Base{public:virtual void f(){cout << "Base::f()" <<endl;}virtual void g() {cout << "Base::g()" <<endl;}virtual void h() {cout << "Base::h()" <<endl;}};void main(){typedef void (* Fuc)();Fuc pFun;Base b;cout << "虚函数表的地址"<<(int*)&b <<endl;cout << "第一个虚函数的地址是:" << (int*)*(int*)&b <<endl;cout << " 取出该地址里的内容以int指针(int*)型输出:" << (int*)*(int*)*(int*)&b <<endl;cout << " 取出该地址里的内容以函数指针型(Fuc)输出:" << endl;((Fuc)*(int*)*(int*)&b)();/*********************************************************************** 第二个函数怎么取,应该是指向该虚函数表的指针+1.指向该函数的虚函数表的指针 (int*)*(int*)&b第二个是 (int*)*(int*)&b+1.取出内容 *((int*)*(int*)&b+1) 转为函数指针型(Fuc)*((int*)*(int*)&b+1)***********************************************************************/cout << "第二个虚函数是:" <<endl;pFun=(Fuc)*((int*)*(int*)(&b)+1);pFun();}
如图所示
分析:
0 0
- 关于虚函数地址的问题
- 关于“地址”的问题
- 关于strcpy与memcpy函数的地址重叠问题
- 关于偏移地址的问题
- 关于网页地址的问题
- 关于数组地址的问题
- 关于指针地址的问题
- 关于虚函数的问题
- 关于VS2008debug编译下函数名字就是函数地址的问题
- 关于IP地址的几个函数
- 关于IP地址的几个函数
- 关于操作IP地址的函数
- 关于LNMP下pathinfo模式下THINKPHP框架U函数的地址错误问题
- 关于web开发的地址的问题
- 关于内存地址对齐的问题
- 关于SQL2005的IP地址连接问题
- 关于客户端IP地址的获取问题
- 关于屏蔽PDF的地址问题
- 第5周作业-打字成绩判断程序(双版本)
- 微信公众平台开发者模式学习资料整理
- LDA学习总结
- 嗮一嗮我的金山打字!
- 那些年的那些题目汇总
- 关于虚函数地址的问题
- LeetCode Reverse Words in a String(反转字符串)
- UVa 752 - Unscrambling Images
- ‘SA_INTERRUPT’ undeclared (first use in this function)的解决办法
- 计算几何_二维几何模板_double版
- AHU校赛网赛解题报告
- CSDN广告还是被攻击了?病毒?木马?网络钓鱼?
- 十大将拯救地球的开源硬件项目
- ARM TrustZone