2020-01-09 可执行文件结构

一、文件头:

1.ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型、硬件平台、硬件平台版本、入口地址、程序头入口和长度、段表的位置和长度及段的数量等。

二、段表:

1.保存段的基本特性,比如每个段的段名、段的长度、在文件中的偏移、读写权限及段的其他属性。

2.ELF文件的段结构就是由段表决定的,编译器、链接器和装载器都是依靠段表来定位和访问各个段的属性的。

三、代码段(.text)

1、代码转成的汇编指令

四、数据段

1、(.data)里放已经初始化了的全局静态变量和局部静态变量,有时候编译器会把字符串常量放到(.data)段

2、(.rodata)里放的是只读数据,一般是程序里的只读变量(如const修饰的变量)和字符串常量。

五、BSS段

1、(.bss)段里放的是未初始化的全局变量和局部静态变量,有的编译器会将全局的未初始化变量存放在目标文件.bss段,有些则不放,只是预留一个未定义的全局变量符号,等到最终链接成可执行文件的时候再在.bss段分配空间。

六、(.strtab)段

1、字符串表,用于存储ELF文件中用到的各种字符串

七、(.symtab)段

1、符号表

八、(.shstrtab)段

1、段名表

九、(.comment)段

1、存放的是编辑器信息版本信息

十、(.dynamic)段

1、动态链接信息

十一、(.plt .got)段

1、动态链接的跳转表和全局入口表

十二、(.init .fini)段

1、程序初始化与终结代码段

十三、(.rel.*)

1、重定位表,链接的时候需要对目标文件中某些不为进行重定位,即代码段和数据段中那些对绝对地址的引用的位置。

你可能感兴趣的:(2020-01-09 可执行文件结构)