栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++从虚表地址中取内容

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++从虚表地址中取内容

开局一张图

从地址中,调用虚表中的函数,上图!

1、定义父类指针地址,申请子类内存空间

cParent *cp = new cSon;

2、获取虚表的首地址

cp          指针变量

int*        强转为int类型

* 再取*,表示取虚表的首地址

为什么​​*​​是取虚表呢,因为cp指针变量本身就是父类地址申请的子类空间,就是虚析构

*(int*)cp

3、虚表首地址取到了,接下来该取虚表中的第一个元素首地址

将虚表首地址强转为int类型,加0,然后取​​*​​,即可取到第一个元素首地址

*((int*)*(int*)cp + 0);

取第二个元素首地址呢?加1,取​​*​​即可

*((int*)*(int*)cp + 1);

(虚表首地址强转为int后,加几并取​​*​​表示取虚表中第几个函数地址)

4、函数地址调用

每个元素的首地址都有了,接下来定义一个void 函数指针来调用元素地址

typedef void (*p)();

((p)(*((int*)*(int*)cp + 0)))(); // 加() 表示调用,不加表示引用,肯定要加的

注意编译环境是x86

最后

文章短小,但是实用!希望帮助正在学习C++的你。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号