获取虚函数表指针
来源:互联网 发布:网络科学相关论文 编辑:程序博客网 时间:2024/05/29 16:32
/* 获取虚函数表指针。*/#include<iostream>using namespace std;class Stu{public:virtual void go1(){cout << "走来..." << endl;}virtual void go2(){cout << "跑来..." << endl;}virtual void go3(){cout << "飞来..." << endl;}};class MyStu :public Stu{virtual void go1(){cout << "my走来..." << endl;}virtual void go2(){cout << "my跑来..." << endl;}virtual void go3(){cout << "my飞来..." << endl;}};void main(){Stu *p = new MyStu;cout << sizeof(*p) << endl; //内容 *pcout << p << endl;//对象的地址cout << (void *)p << endl;//对象的地址cout << *(int *)p << endl;//虚函数的地址,当做整数读出。cout << (void *)( *(int *)p ) << endl;//虚函数表的地址。cout << (void *)( *((int *)*(int *)p +0) ) << endl; //取出第一个元素的地址/*p:是个指针。(int *)p:转换成 int 类型的指针*(int *)p:把转换成int 类型指针p 的内容取出(int *)( *(int *)p): 在转换成 int 类型的指针 (int *)( *(int *)p) +0: 取出第一个元素的地址*((int *)( *(int *)p) +0):得到第一个元素的内容(void *)(*((int *)( *(int *)p) +0));得到第一个元素的地址*/cout << (void *)(*((int *)*(int *)p + 1)) << endl; //取出第一个元素的cout << (void *)(*((int *)*(int *)p + 2)) << endl; //取出第一个元素的auto fun1 = (void *)(*((int *)*(int *)p + 0));auto fun2 = (void *)(*((int *)*(int *)p + 1));auto fun3 = (void *)(*((int *)*(int *)p + 3));typedef void (*P)();P Pfun[3];//函数指针数组for (int i = 0; i < 3; i++){Pfun[i] = (P)(void *)(*((int *)*(int *)p + i));//强转成 P 类型Pfun[i](); //调用}cin.get();}void main04_A(){cout << sizeof(Stu) << endl;Stu *p = new MyStu;cin.get();}
0 0
- 获取虚函数表指针
- 获取虚函数指针
- 获取C++类中的虚函数表的指针和虚函数表中函数的指针
- 获取CorBindToRuntimeEx函数指针
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取
- 单一继承下无虚函数覆盖__虚函数表中的虚函数指针的获取(二)
- 虚函数表 & 指针
- 如何获取虚表指针
- 获取成员函数的指针
- 获取成员函数的指针
- 获取成员函数的指针
- DLL加载、获取函数指针。
- 虚函数表指针、虚基类表指针
- 虚函数表指针、虚基类表指针
- 虚函数表指针,虚函数表
- 虚函数表指针,虚函数表
- 虚函数表与虚函数指针
- C++虚函数指针虚函数表
- shell脚本一键安装LNMP(liunx+nginx+mysql+php)环境
- 【Android】仿斗鱼滑动验证码
- centos的字符集确实挺讨厌
- sd卡和USB的mount方法
- Windows下用命令行导出导入MySQL数据库
- 获取虚函数表指针
- 关于混淆时遇到的问题
- window下安装docker的三种方法
- C#面向对象之构造函数
- href="#"和href="javascript:void(0)"
- 需要修改的表
- 搜索
- PDO 类库
- java DES加密文件上传数据库,下载解密文件