七、代码生成阶段

代码生成阶段的产物就是二进制目标文件(.o或者.obj文件)。

其实在前面的实例演示中,我们给编译器传递了-c的参数,最终他会生成一个二进制目标文件。其实,前面的语言分析、代码优化等都是伴随着代码生成进行的。语言分析没有问题,编译过程不会被打断,最终就会生成二进制目标文件。代码优化也是在代码生成阶段对代码进行优化。

        其实,学到现在我们终于明白了,编译的本质就是将一种基于ASCⅡ编写的文件(人们直接阅读的文本文件)转换成适合特定机器运行的二进制文件的过程。

使用objdump工具查看二进制目标文件

        现在可以明确的告诉大家,在二进制目标文件中(.o或者.obj文件)存放的就是针对我们机器(特定体系结构的处理器)的机器代码。这种机器代码是一种低级的语言,利用专门用于反汇编二进制的文件工具objdump,可以一种可阅读的格式让我们更多地了解二进制文件可能带有的附加信息。

我们现在把demo3.3.1.cpp转换成了demo3.3.1.o了。那么在终端(Windows的cmd)输入下列命令,就可以了解demo3.3.1.o带有的附加信息了。

D:\software\项目\Code>g++ -O3 -c demo3.3.1.cpp

拥有汇编语言的功底才能阅读反汇编后的文件 

当然也可以输入下列命令,将屏幕输出重定向到一个指定的文本文件中,如demo3.3.1.txt,保存下来慢慢查看研究。

D:\software\项目\Code>objdump -D demo3.3.1.o >> demo3.3.1.txt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值