gdb查看虚函数表、函数地址
点击(此处)折叠或打开
- (gdb) info line a.cpp:10
- Line 10 of "a.cpp" starts at address 0x80487d4 <_ZN1B5test2Ev> and ends at 0x80487d7 <_ZN1B5test2Ev+3>.
- (gdb) p _ZN1B5test2Ev
- $1 = {void (B * const)} 0x80487d4
- (gdb)
可以直接根据函数地址去打断点,当然如果知道文件和行号其实没必要拐个弯来打这种费解的断点,应用场合更多是想使用汇编调试的时候。
点击(此处)折叠或打开
- 16 public:
- 17 virtual void test2(){
- 18 cout << "If I'm lying, I'm crying!" << endl;
- 19 }
- 20
- (gdb) info line 17
- Line 17 of "a.cpp" starts at address 0x8048808 <_ZN1D5test2Ev> and ends at 0x804880e <_ZN1D5test2Ev+6>.
- (gdb) b *0x804880e
- Note: breakpoint 2 also set at pc 0x804880e.
- Breakpoint 3 at 0x804880e: file a.cpp, line 18.
点击(此处)折叠或打开
- (gdb) set print object on
- (gdb) p b
- $3 = (D &) @0xbfe3116c: { = {_vptr.B = 0x8048948}, }
点击(此处)折叠或打开
- (gdb) p b
- $6 = (D &) @0xbfe3116c: { = {_vptr.B = 0x8048948}, }
- (gdb) p /a *(void**)0x8048948@2
- $7 = {0x8048834 <_ZN1D4testEv>, 0x8048808 <_ZN1D5test2Ev>}
查看虚表的前面,会发现g++实现的时候将RTTI信息放到虚函数表的前面一点点了。反汇编查看代码其实也可以发现的,typeid会根据虚表指针偏移一下去找RTTI信息。
点击(此处)折叠或打开
- (gdb) p /a *((void**)0x8048948-1)
- $18 = 0x8048950 <_ZTI1D>
点击(此处)折叠或打开
- sles10sp1:~/test # c++filt _ZTI
gdb查看虚函数表、函数地址的更多相关文章
- vs查看虚函数表和类内存布局
虚继承和虚基类 虚继承:在继承定义中包含了virtual关键字的继承关系: 虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:class CSubClass : publ ...
- C++ 虚函数表解析(比较清楚,还可打印虚函数地址)
C++ 虚函数表解析 陈皓 http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父 ...
- 类虚函数表原理实现分析(当我们将虚表地址[n]中的函数替换,那么虚函数的实现就由我们来控制了)
原理分析 当调用一个虚函数时, 编译器生成的代码会调用 虚表地址[0](param1, param2)这样的函数. 已经不是在调用函数名了. 当我们将虚表地址[n]中的函数实现改为另外的函数, 虚函数 ...
- C++虚函数与虚函数表
多态性可分为两类:静态多态和动态多态.函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的. 每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说 ...
- C++虚函数及虚函数表解析
一.背景知识(一些基本概念) 虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数.纯虚函数(Pure Virtual Functio ...
- C++ 类中有虚函数(虚函数表)时 内存分布
虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table.在这个表中,主是要一个类的虚函数的地址表 ...
- 深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)
本文转载自:http://blog.51cto.com/9291927/2148695 总结: 一.成员函数的内存为什么不会反映在sizeof运算符上? 成员函数可以被看作是类 ...
- C++学习 - 虚表,虚函数,虚函数表指针学习笔记
http://blog.csdn.net/alps1992/article/details/45052403 虚函数 虚函数就是用virtual来修饰的函数.虚函数是实现C++多态的基础. 虚表 每个 ...
- C++虚函数表解析(图文并茂,非常清楚)( 任何妄图使用父类指针想调用子类中的未覆盖父类的成员函数的行为都会被编译器视为非法)good
C++中的虚函数的作用主要是实现了多态的机制.关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数.这种技术可以让父类的指针有“多种形态”,这是一种泛型技术 ...
随机推荐
- Java_链表实现
http://blog.csdn.net/a19881029/article/details/22695289
- Java线程练习
/*线程练习创建两个线程,与主线程交替运行 */ class Text extends Thread{ private String name; Text(String name) ...
- mysql show processlist 显示mysql查询进程
1.进入mysql/bin目录下输入mysqladmin processlist; 2.启动mysql,输入show processlist; 如果有 SUPER 权限,则可以看到全部的线程,否则,只 ...
- Java官方Demo Mark
Java2D里四个重要的基类:AnimatingSurface: 动画界面基类ControlsSurface: 控制界面基类AnimatingCon ...
- 关于Angular.js Routing 的学习笔记(实现单页应用)
最近开始学习angular.js,发现angular.js确实很方便,也很强大.在看到 AngularJS Routing and Multiple Views 这一部分的时候,有点乱.现在通过记录一 ...
- NOSQL之【Redis学习:配置说明】
# yes:后台运行:no:不是后台运行(老版本默认) daemonize yes # redis的进程文件 pidfile /var/run/redis.pid # 端口 port # bind_a ...
- PHP学习心得(八)——运算符
运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西.所以可以认为函数或任何会返回一个值(例如 print)的结构是运算符,而那些没有返回值的( ...
- MAC自带的lnmp
MAC自身带有apache,php. 1.启动apache服务 sudo apachectl start/restart/stop 2.查看php的版本 php -v 3.让apache支持ph ...
- OFBiz进阶之环境搭建(eclipse)
一. 环境准备 1. jdk1.6 下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive- ...
- Win10 IIS以及ASP.NET 4.0配置问题日志
问题日志 升级到Win10并安装了VS2015后,原有ASP.NET 4.0项目在本机的IIS部署出现问题. 安装IIS: 在[控制面板.程序.启用或关闭Windows功能.Internet Info ...