目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含您所编写的代码转换成的机器语言,而可执行文件还包含您所使用的库例程以及启动代码。
ELF文件包括:1.可重定位的目标文件
2.可执行文件
3.共享库
ELF文件时可执行文件,是在Linux下运行的。
EXE文件也是可执行文件,一种可在操作系统存储空间中浮动定位的可执行程序,只能MS-DOS和MS-WINDOWS下运行,每个exe文件包含一个文件头和一个可重定位程序的映像。
1.ELF文件头(ELF Header)
文件头中定义了ELF魔数、文件机器字节长度、数据存储方式、版本等等
魔数:是所有ELF文件都必须相同的标识码
2.段表(Section Header Table)
段表描述了ELF的各个段的信息,如段名、段的长度、在文件中的偏移、读写权限等等。
编译器、链接器和装载器都需要靠段表来定位和访问各个段的属性。
段名只是在链接和编译过程中有意义,但他不能真正的表示段的类型。对于编译器和链接器来说,主要决定段的属性的是段的类型(sh_type)和段的标志位(sh_flags)。
段的标志位表示该段在进程虚拟地址控件中的属性,如是否可写、读、执行。
段的链接信息(sh_link、sh_info),如重定位表、符号表等。