一、
使用GCC编译代码的时候,可以分解为4个步骤:
预处理
编译:编译的过程就是把预处理完成的文件进行一系列词法分析、语法分析、语义分析以及优化后生产相应的汇编代码文件。
汇编:汇编器是将汇编代码转变成机器可以执行的指令。
链接:链接的主要内容就是把各个模块之间相互引用的部分都处理好,使得各个模块之间能够正确的衔接。链接的过程主要包括了地址和空间分配、符号决议(符号绑定)、重定位等步骤。
二、目标文件
2.1
现在流行的可执行文件(Exxcutable)主要是Windows下的PE(Portable Executable)和Linux下的ELF(Executable Linkable Format),他们都是COFF(Common file format)格式的变种。目标文件就是源代码编译之后但未进行链接的的那些中间文件(Windows的.obj和Linux的.o),目标文件跟可执行文件的内容与结构类似,所以一般跟可执行文件采用一种格式存储。从广义上看,目标文件和可执行文件可以看做一种类型的文件。还有动态链接库(Windows的.dll和Linux的.so)、静态链接库(Windows的.lib和Linux的.a)文件都按照可执行文件的格式存储。
2.2
2.2.1
总体来说,程序源代码被编译以后主要分为两种段:程序指令和程序数据。代码段属于程序指令,数据段和.bss段属于程序数据。
关于.bss段:
未初始化的全局变量和局部静态变量的值都为0,如果放在.data段需要分配空间并且存放数据0,这样是没有必要的,可执行文件必须
编译链接装载
于 2022-05-09 17:31:05 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)