代码生成阶段的产物就是二进制目标文件(.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