目标文件里有什么
目标文件的格式
现在PC平台比较流行的是:
- Windows下的PE(Portable Excutable)
- Linux的ELF(Excutable Linkable Format)
它们都是COFF(Comon File Fotmat)文件的变种
ELF格式文件分类
ELF文件类型 | 说明 | 实例 |
---|---|---|
可重定位文件(Relocatable File) | 这些文件包含了数据和代码,可以被用来被链接成可执行文件和目标共享文件,静态链接库也可以归为这一类 | Linux的.so,Windows的.obj |
可执行文件(Executable File) | 这类文件代表了可执行文件,这类文件一般没有扩展名 | Windows的exe,/bin/bash |
共享链接文件(Shared Object File) | 这种文件包含了代码和数据,可以与其他可重定位文件和共享目标文件链接,产生新的可执行文件,也可以与其他共享目标文件和可执行文件结合,作为进程映像的一部分来运行 | Linux的.so,Windows的dll |
核心转储文件(Core Dump File) | 当进程意外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转出到核心转出文件 | Linux下的Core Dump |
Linux下可以使用file命令来查看文件格式:
file foo.ba
file /bin/bash
file /lib/ld-2.6.so
Exceutable File/Object File
File Header | 文件头,描述整个文件的属性,各个段表的属性 |
---|---|
.text section | 代码段 |
.data section | 数据段 |
.bss section | 数据段,存放未初始化的全局变量和局部静态变量 |
分段的好处:
- 对不同的段可以使用不同的权限,如代码段使用只读权限
- 提高代码命中率
- 节省相同段的存放空间