vs cpp代码 添加汇编_C++ 汇编代码查看
gcc 编译为汇编代码
原始C++代码如下:
#include "stdio.h"
class Animal {
public:
virtual void name() { printf("I'm Animal"); }
};
class Cat : public Animal {
public:
virtual void name() override { printf("I'm Cat"); }
};
void func(Animal *animal) {
animal->name();
}
int main(void) {
func(new Animal());
func(new Cat());
return 0;
}
编译成汇编代码:
g++ -S test.cpp -o test.s
查看:
cat test.s
部分结果:
main:
.LFB3:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
pushq %rbx
subq $8, %rsp
.cfi_offset 3, -24
你发现你完全看不懂
使用 as 展示汇编代码
另一种更好的做法是使用as:
编译成汇编代码:
g++ -S -fverbose-asm -g test.cpp -o test.s
查看:
as -alhnd test.s
现在是把代码和汇编代码对应起来了:
16:test.cpp ****
17:test.cpp **** int main(void) {
202 .loc 1 17 16
.........
212 # test.cpp:18: func(new Animal());
18:test.cpp **** func(new Animal());
213 .loc 1 18 21
214 002b BF080000 movl $8, %edi #,
214 00
215 0030 E8000000 call _Znwm #
215 00
216 0035 4889C3 movq %rax, %rbx # tmp86, _3
217 0038 48C70300 movq $0, (%rbx) #, MEM[(struct Animal *)_4]._vptr.Animal
217 000000
218 003f 4889DF movq %rbx, %rdi # _3,
219 0042 E8000000 call _ZN6AnimalC1Ev #
219 00
220 # test.cpp:18: func(new Animal());
这种情况看汇编代码比刚才更清楚一些。
使用 objdump 进行反汇编
如果直接编成机器码,需要使用objdump进行反汇编:
g++ -save-temps -fverbose-asm -g -o test test.cpp
objdump -S --disassemble test
效果如下:
0000000000400654 :
int main(void) {
400654: 55 push %rbp
400655: 48 89 e5 mov %rsp,%rbp
400658: 53 push %rbx
400659: 48 83 ec 08 sub $0x8,%rsp
func(new Animal());
40065d: bf 08 00 00 00 mov $0x8,%edi
400662: e8 d9 fe ff ff callq 400540 <_znwm>
400667: 48 89 c3 mov %rax,%rbx
40066a: 48 c7 03 00 00 00 00 movq $0x0,(%rbx)
400671: 48 89 df mov %rbx,%rdi
400674: e8 6d 00 00 00 callq 4006e6 <_zn6animalc1ev>
400679: 48 89 df mov %rbx,%rdi
40067c: e8 b1 ff ff ff callq 400632 <_z4funcp6animal>
感觉使用objdump效果最好,但还有效果更好的。
使用 godbolt 可视化结果
这个网站: https://godbolt.org
真的非常好用,效果如下:
非常炫酷,而且一一对应。
如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦
vs cpp代码 添加汇编_C++ 汇编代码查看相关推荐
- css代码添加背景图片常用代码
css代码添加背景图片常用代码 1 背景颜色 {background-color:数值} 2 背景图片 {background-image: url(url)|none} 3 背景重复 {backgr ...
- 【Windows 逆向】OD 调试器工具 ( 分析 OD 硬件断点处的关键代码 | 添加硬件断点 | 关键代码 | MOV 指令 | EAX 寄存器值分析 | 使用命令查看 esi+0cc 地址 )
文章目录 一.添加硬件断点 二.关键代码 三.MOV 汇编指令格式 四.EAX 寄存器值分析 五.使用命令查看 esi+0cc 地址 一.添加硬件断点 在上一篇博客中 , 在子弹个数数据内存地址 07 ...
- 学籍管理系统文件版c语言代码,学籍管理系统_c语言代码
通过结构体.动态存储函数建立单向链表,结合文件操作函数和指针实现对大量有序同类型数据(学生信息)的处理. #include #include #include #include #define NAM ...
- MGraph图(代码、分析、汇编)
目录: 代码: 分析: 汇编: MGrapth图表示有邻接矩阵的方式构成的图结构. 邻接矩阵用两个数组保存数据,一个一维数组存储图中的顶点信息,一个二维数组存储图中边或弧的信息. 无向图中的二维数组是 ...
- 二叉树遍历(代码,分析,汇编)
目录: 代码: 分析: 汇编: 代码: BTree.h BTree.c 二叉树(多路平衡搜索树) LinkQueue.h #ifndef _LINKQUEUE_H_ #define _LINKQUEU ...
- 栈应用_检测成对符号是否正确使用(代码、分析、汇编)
目录: 代码: 分析: 汇编: 代码: LinkList.h LinkList.c LinkStack.h LinkStack.c 栈-线性表 main.c #include <stdio.h& ...
- 栈-顺序表(代码、分析、汇编)
目录: 代码: 分析: 汇编: 代码: SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_typedef void SeqList;//定义顺序表类型 ...
- 栈-线性表(代码、分析、汇编)
目录: 代码: 分析: 汇编: 代码: LinkList.h #ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定义链 ...
- stm32启动过程、cortex-m3架构、堆栈代码位置、编译汇编链接分析
分析 一. 寄存器.架构.工作流程 1. 寄存器架构 二 .总线与各个部件之间的关系(主要是I-Code Bus.D-Code Bus.System Bus) 体系结构:哈佛结构与冯诺依曼结构的区别 ...
最新文章
- php操作mysql数据库,PHP操作mysql数据库
- 采集网站特殊文件Meta信息
- 深拷贝拯救指针重复释放(浅拷贝)造成的内存泄漏
- windows7黑屏修复_如何在Windows 10更新后修复黑屏
- 详述由ENQ:TX – ROW LOCK CONTENTION引起的全局死锁处理过程
- 强化学习ppt_强化学习和最优控制的十个关键点81页PPT汇总
- 【报告分享】2020-2021视频号发展现状与趋势.pdf(附下载链接)
- SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob
- java blowfish ecb,node.js – 使用nodejs crypto和php的mcrypt解密blowfish-ecb
- c语言自学的代码表示,【图片】c语言初级代码练习自学【编程吧】_百度贴吧...
- 第十四届全国大学生智能汽车竞赛获奖名单
- SMS模型格网转换为MIKE21的格网源代码
- WebPlayer9电影整站系统第三方电影批量添加工具
- 2.2、云计算FusionCompute计算虚拟化
- Hibernate报错org.hibernate.MappingException: Unknown entity解决方法
- 软件测试之黑盒测试方法介绍及测试用例练习
- postgresql计算两点距离
- ❤️微信小程序 云开发 教程合集(视频+图文)免费❤️
- 平行束投影数据的仿真
- torch.cat()函数 ,关于四维tensor维度合并。
热门文章
- C++::My Effective C++
- fpga多摩川编码器开源代码_F28379D之CLB解码多摩川编码器1——入手小知识(原创)...
- 计算机信息技术基础知识教案,计算机的基础知识
- python 生成器_python 生成器 - 刘江的python教程
- python入门经典-入门python有什么好的书籍推荐?
- python语言能做什么-python语言用来干什么
- python菜鸟教程-Python3 函数
- php json 小红点,关于PHP的json_encode的一个小技巧
- php生成站点地图,php生成百度站点地图sitemap.xml
- linux向脚本传递参数,Linux 使用位置变量向脚本传递参数