可执行与可链接格式(ELF)
存在两种视图:

格式

- ELF 头: readelf -l main 查看
- 生成该文件的系统的字大小、字节序:16 字节
- 文件类型 (. o,exec,. so)
- 机器类型
- 节头表的位置
- 节头部表中条目大小、数量等
- 不同节的位置和大小是由节头部表描述的
- 每个节都有一个固定大小的条目(entry)
- 不同节的位置和大小是由节头部表描述的
- 段头表/程序头表
- 页面大小
- 虚拟地址内存段 (节)
- 段大小
- .text 节(代码)
- 代码
- .rodata 节(只读数据)
- 只读数据 : printf 的格式串、跳转表, …
- .data 节 (数据/可读写)
- 已初始化全局和静态变量
- .bss 节 (未初始化全局变量)
- 未初始化/初始化为 0 的全局和静态变量
- “Block Started by Symbol” 符号开始的块
- “Better Save Space”更加节省空间
- 仅有节头,但节本身不占用磁盘空间
- .symtab 节(符号表)
- 符号表
- 函数和静态变量名
- 节名称和位置
- .rel.text 节(可重定位代码)
- .text 节的可重定位信息
- 在可执行文件中需要修改的指令地址
- 需修改的指令.
- .rel.data 节(可重定位数据)
- .data 节的可重定位信息
- 在合并后的可执行文件中需要修改的指针数据的地址
- .debug 节(调试)
- 为符号调试的信息 (gcc -g)
- 节头表Section header table
- 每个节的偏移量和大小
ELF头
命令行查看

开头 16 个字节的含义:Magic

header 的长度一共是 64 字节