Cpp 对象模型探索 / 外部调用私有的虚函数的方法
答案
通过虚函数表指针找到虚函数表,再通过虚函数表中的元素,即:函数指针,得到私有函数的首地址。
示例
#include <iostream>class A
{
private:virtual void func(){ std::cout << "func()" << std::endl;}
};
using PFUNC = void (*)();
int main()
{A aobj;int* pvptr = (int*)&aobj; // 获取 aobj 的虚函数表指针的地址。int* vptr = (int *)*pvptr; // 获取 aobj 的虚函数表的首地址。PFUNC pfunc = (PFUNC)*(vptr + 0); // 获取 aobj 的虚函数表的第一项的值,也就是函数 func() 的首地址。// 将其转为 PFUNC 类型。pfunc();return 0;
}
结果
func()
(SAW:Game Over!)
Cpp 对象模型探索 / 外部调用私有的虚函数的方法相关推荐
- Cpp 对象模型探索 / 静态联编和动态联编
一.源码 #include <iostream>class Father { public:Father(){/*** 该处直接将该对象清零,意味着虚函数表指针亦被清零.*/memset( ...
- Cpp 对象模型探索 / 虚函数的调用方式
虚函数有两种调用方式: 方案1,直接使用函数地址调用. 方案2,通过对象的虚函数表指针找到虚函数表,从而得到函数地址,完成调用. 应用场景主要有如下三种情况: 当对象直接调用时,采用方案 1 调用虚函 ...
- Cpp 对象模型探索 / 类引入虚函数有哪些成本?
编译时会为类对象引入虚函数表. 类对象中会产生虚函数表指针 vptr,用于指向虚函数表. 在对象的构造函数中插入向 vptr 赋值虚函数表的首地址的代码. 若是多重继承,每个父类均有虚函数,那么子类会 ...
- Cpp 对象模型探索 / 继承关系下的虚函数手动调用
一.多态机理 #include <iostream>class Father { public:virtual void Func1(){std::cout << " ...
- Cpp 对象模型探索 / 多重继承下基类指针释放子类对象的原理说明(虚析构函数的作用)
源码 #include <iostream>class Base1 { public:virtual void func_1_1(){ std::cout << "B ...
- Cpp 对象模型探索 / 类静态成员函数的调用方式
一.普通静态成员函数的调用方法 栗子: class CA { public:static void func() {} };int main() {CA A;A.func();CA::func();r ...
- Cpp 对象模型探索 / 虚基类表作用
一.结论 虚基类表的作用是帮助编译器找到该类中的虚基类中各个成员变量在内存布局中的位置. 虚基类表中的值是偏移值,即:各个虚基类的成员变量在子类中的内存布局中相对于虚函数指针的偏移值. 二.栗子 1. ...
- Cpp 对象模型探索 / 多重继承虚函数表分析
一.源码 #include <iostream>class Base1 { public:virtual void func11(){std::cout << "Ba ...
- Cpp 对象模型探索 / 单一继承的类的内存布局
目录 1.父类和子类都没有虚函数 2.父类有虚函数.子类没有虚函数 3.父类没有虚函数,子类有虚函数 4.父类和子类都有虚函数 5.总结 #include <iostream> class ...
最新文章
- Excel中将一个表格的数据关联到另一个表格
- ORB算法原理解读【不错】
- 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
- 【Deep Learning笔记】神经网络基础
- 第五课 formal method 的课件和翻译,原来老师用latex打印的,pdf转成markdown,之后翻译的
- erlang精要(31)-尾递归版的翻转列表
- starima与arima 预测_38-一些预测模型与方法简介(ARIMA、指数平滑等)
- zeros什么意思_zeros:zeros还是zeroes?4)是什么意思?
- Java 根据输入的a、b、c,计算三角形面积和周长。根据程序上下文以及输入输出样例,填写程序空白,使程序完整
- 狄拉克函数- dirac 分布
- 2020年创业风口:社交电商
- 图片转成pdf的免费软件
- 利用ChatGPT学习生物信息数据分析
- 『最小表示法 Necklace』
- 大龄计算机考研 考研帮,以自己的亲身经历,献给那些大龄的考研朋友们,加油!...
- 推荐几本软件工程方向的书
- 常用 SQL 技巧和常见问题
- 无穷小微积分与考研实践
- 从零开始使用webpack 搭建vue项目
- 用友 t3 用数据库还原账套 (畅捷通 10.6 plus)
热门文章
- Spring.Web.Mvc 注入(控制器属性注入)
- 生活中处处有joke!!
- python中csv模块读写文件
- Windows scp传输文件给Linux
- docker配置data-root:设置镜像存储路径 镜像加速地址 私有仓库
- Linux apache2将目录从/var/www/html调整为/根目录时报错:You don‘t have permission to access / on this server
- docker安装 kuboard v3 - 内建用户库
- Python Django 配置admin后台管理类代码示例
- Python Django 迁移失败如何处理
- Linux ifconfig指令