gcc将源代码转化成可执行代码过程:
首先,C预处理器扩展源代码, 插入所有用#include命令指定的文件, 并扩展所有用#define声明指定的宏。
其次,编译器产生源代码的汇编代码,名字为“文件名.s”
接下来,汇编器会将汇编代码转化成二进制目标代码文件“.o”(目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但是还没填入全局值的地址)
最后,链接器将目标代码文件与实现库函数(例如printf)的代码合并, 并产生最终的可执行代码文件(可执行代码是机器代码的第二种形式,也就是处理器执行的代码格式)
参考资料:《深入理解计算机系统》
预处理后的文件(一般为".i")
gcc -E .c
.s文件(汇编代码)
gcc -Og -S 文件.c
文件.o(目标文件)
gcc -Og -o 文件.c
反汇编
objdump -d 文件.o