当前位置: 首页 > news >正文

C++单继承虚函数表探索

在vs2022中,虚函数表在监视窗口和内存里显示不全,可以采用以下方法来查看所有虚函数地址:

定义函数指针,因为虚函数表本质上是一个函数指针数组,其中每个指针都指向一个虚函数,因此我们只需要取到这个虚函数表就可以查看每个虚函数的地址

//单继承虚函数表探索
class Base
{
public:virtual void func1() { cout << "Base::func1()" << endl; }virtual void func2() { cout << "Base::func2()" << endl; }
private:int a;
};class Derive :public Base
{
public:virtual void func1() { cout << "Derive::func1()" << endl; }virtual void func3() { cout << "Derive::func2()" << endl; }virtual void func4() { cout << "Derive::func4()" << endl; }void func5() { cout << "Derive::func5()" << endl; }
private:int b;
};typedef void(*VFPTR)();
void PrintVTable(VFPTR* vtable)
{cout << "虚函数表地址是:" << vtable << endl;for (int i = 0; vtable[i] != nullptr; i++){printf("第%d个虚函数地址是: ", i);printf("0x%p", vtable[i]);VFPTR f = vtable[i];f();}cout << endl;
}int main()
{Base b;Derive d;VFPTR* vtable1 = (VFPTR*)(*(int*)&b);VFPTR* vtable2 = (VFPTR*)(*(int*)&d);PrintVTable(vtable1);PrintVTable(vtable2);return 0;
}

http://www.lryc.cn/news/618714.html

相关文章:

  • 什么是跨域访问问题,如何解决?
  • 使用 rsync 上传下载文件:详解原理、目录同步和常见问题
  • 间隙锁(Gap Lock)
  • 【C++】5. 内存管理
  • 卫生间装修防水怎么做合适?
  • redis原理篇--Dict
  • 《Linux基础知识-1》
  • Linux随记(二十二)
  • Secure 第二天作业
  • SM2和SM4加密算法详解
  • 防火墙快速管理软件,66K超小巧
  • 【网络运维】Linux和自动化:Ansible
  • WEB虚拟主机3种部署方式全解析
  • Linux软件编程(三)文件操作-文件 I/O
  • Outstanding和Credit的概念详解
  • 动态路由协议(一)
  • 《Redis日志系统操作:LIST结构实现日志收集与查询》
  • 在线免VIP的动漫网站
  • 机器学习-集成学习(EnsembleLearning)
  • GitHub的简单使用方法----(4)
  • 为什么灰度图用G(绿色)通道?
  • CSRF 攻击
  • 记对外国某服务器的内网渗透
  • 解释 Spring MVC 的工作原理
  • Linux中使用计划任务和tar命令实现文件备份
  • 模拟人脑处理文本——从段落到时间线叙事,再到动画
  • 【PCB设计经验】去耦电容如何布局?
  • C++ 学习与 CLion 使用:(二)using namespace std 语句详解,以及 std 空间的标识符罗列
  • 【python实用小脚本-182】Python一键爬取今日新闻:5分钟生成Word+CSV——再也不用复制粘贴
  • 【web站点安全开发】任务2:HTML5核心特性与元素详解