ELF文件ELF文件
🌇

ELF文件

 

参考

notion image
notion image

ELF header

readelf -h xxx
32位ELF文件中常用的数据格式
名称
大小
对齐
目的
4
4
无符号程序地址
2
2
无符号中等整数
4
4
无符号文件偏移
4
4
有符号大整数
4
4
无符号大整数
1
1
无符号小整数
 

Section

 
readelf -S xxx
名称
类型
属性
含义
SHT_NOBITS
SHF_ALLOC +SHF_WRITE
包含将出现在程序的内存映像中的为初始化数据。根据定义,当程序开始执行,系统将把这些数据初始化为 0。此节区不占用文件空间。
SHT_PROGBITS
(无)
包含版本控制信息。
SHT_PROGBITS
SHF_ALLOC +SHF_WRITE
这些节区包含初始化了的数据,将出现在程序的内存映像中。
SHT_PROGBITS
SHF_ALLOC +SHF_WRITE
这些节区包含初始化了的数据,将出现在程序的内存映像中。
SHT_PROGBITS
(无)
此节区包含用于符号调试的信息。
SHT_DYNAMIC
此节区包含动态链接信息。节区的属性将包含 SHF_ALLOC 位。是否 SHF_WRITE 位被设置取决于处理器。
SHT_STRTAB
SHF_ALLOC
此节区包含用于动态链接的字符串,大多数情况下这些字符串代表了与符号表项相关的名称。
SHT_DYNSYM
SHF_ALLOC
此节区包含了动态链接符号表。
SHT_PROGBITS
SHF_ALLOC +SHF_EXECINSTR
此节区包含了可执行的指令,是进程终止代码的一部分。程序正常退出时,系统将安排执行这里的代码。
SHT_PROGBITS
此节区包含全局偏移表。
SHT_HASH
SHF_ALLOC
此节区包含了一个符号哈希表。
SHT_PROGBITS
SHF_ALLOC +SHF_EXECINSTR
此节区包含了可执行指令,是进程初始化代码的一部分。当程序开始执行时,系统要在开始调用主程序入口之前(通常指 C 语言的 main 函数)执行这些代码。
SHT_PROGBITS
此节区包含程序解释器的路径名。如果程序包含一个可加载的段,段中包含此节区,那么节区的属性将包含 SHF_ALLOC 位,否则该位为 0。
SHT_PROGBITS
(无)
此节区包含符号调试的行号信息,其中描述了源程序与机器指令之间的对应关系。其内容是未定义的。
SHT_NOTE
(无)
此节区中包含注释信息,有独立的格式。
SHT_PROGBITS
此节区包含过程链接表(procedure linkage table)。
SHT_RELSHT_RELA
这些节区中包含了重定位信息。如果文件中包含可加载的段,段中有重定位内容,节区的属性将包含 SHF_ALLOC 位,否则该位置 0。传统上 name 根据重定位所适用的节区给定。例如 .text 节区的重定位节区名字将是:.rel.text 或者 .rela.text。
SHT_PROGBITS
SHF_ALLOC
这些节区包含只读数据,这些数据通常参与进程映像的不可写段。
SHT_STRTAB
此节区包含节区名称。
SHT_STRTAB
此节区包含字符串,通常是代表与符号表项相关的名称。如果文件拥有一个可加载的段,段中包含符号串表,节区的属性将包含SHF_ALLOC 位,否则该位为 0。
SHT_SYMTAB
此节区包含一个符号表。如果文件中包含一个可加载的段,并且该段中包含符号表,那么节区的属性中包含SHF_ALLOC 位,否则该位置为 0。
SHT_PROGBITS
SHF_ALLOC +SHF_EXECINSTR
此节区包含程序的可执行指令。

Segment

readelf -l xxx