二、目标文件
1、目标文件:编译器编译源代码后生成的文件叫目标文件;
2、目标文件的格式:
1)现在PC平台流行的可执行文件(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),他们都是COFF(Common file format)格式的变种。
2)目标文件就是源代码编译后但未进行链接的那些中间文件(windows的.obj和Linux下的.o),它跟可执行文件的内容和结构类似,所以一般跟可执行文件格式一起采用一种格式存储。
3)不光可执行文件(Windows下的.exe和Linux下的ELF可执行文件)按照可执行文件文件格式存储,动态链接库(DLL,Dynamic Linking Library)(Windows下的.dll和Linux下的.so)以及静态链接库(Static Linking Library)(Windows下的.lib和Linux的.a)文件都按照可执行文件格式存储。
3、目标文件内容
1)目标文件中的内容主要包括编译后的机器指令代码、数据以及链接时所需要的一些信息,如符号位、调试信息、字符串等;一般目标文件将这些信息以“节”或者“段”的形式存储,一般情况下,标识一个一定长度的区域;
2)源程序编译后的机器指令经常被存放字代码段(Code Section)里,代码段常见的名字有.text 或者.code,全局变量和局部静态变量数据经常放在数据段(Data Section),一般名字叫.data;.bss段只是为未初始化的全局变量和局部静态变量预留文职而已;
3)总体来说,程序源代码被编译后主要分成两段:程序指令和程序数据。代码段数据程序指令,二数据段和.bss段属于程序数据