别裁伪体亲风雅,转益多师是汝师。这篇文章主要讲述C++从虚表地址中取内容相关的知识,希望能为你提供帮助。
开局一张图从地址中,调用虚表中的函数,上图!
1、定义父类指针地址,申请子类内存空间
cParent *cp = new cSon;
2、获取虚表的首地址
cp
指针变量
为什么?
int*
强转为int类型
* 再取*,表示取虚表的首地址
?*?
?是取虚表呢,因为cp指针变量本身就是父类地址申请的子类空间,就是虚析构
*(int*)cp
3、虚表首地址取到了,接下来该取虚表中的第一个元素首地址
将虚表首地址强转为int类型,加0,然后取??*?
?,即可取到第一个元素首地址
【C++从虚表地址中取内容】*((int*)*(int*)cp + 0);
取第二个元素首地址呢?加1,取?
?*?
?即可
*((int*)*(int*)cp + 1);
(虚表首地址强转为int后,加几并取?
?*?
?表示取虚表中第几个函数地址)
4、函数地址调用
每个元素的首地址都有了,接下来定义一个void 函数指针来调用元素地址
typedef void (*p)();
注意编译环境是x86
((p)(*((int*)*(int*)cp + 0)))();
// 加() 表示调用,不加表示引用,肯定要加的
最后文章短小,但是实用!希望帮助正在学习C++的你。
推荐阅读
- 实践案例(Zabbix通过Proxy被动模式代理跨网段监控Linux主机及应用)
- #导入Word文档图片# CC2530 串口配置步骤
- #云原生征文#深入万物基础-容器
- FastJSON 常用操作
- 搭建EclipseResin Web开发环境
- easyui——datebox控件限制输入的日期
- ant脚本的一些总结
- 使用es的head插件进行简单搜索
- log4j 不打印异常堆栈