ELF二进制目标文件详解
连接程序
找出所有引用的外部模块并链接起来,这些外部模块或函数库一般来自于开发者,操作系统和C运行库。链接程序取出这些函数库,修订指针位置(重定位),并交叉引用模块中的符号解析,最终产生一个可执行模块。符号可以是全局的也可以是局部的。全局符号可以在多个模块中使用。
ELF文件的节
- .bss 为初始化的数据
- .data 已初始化的数据
- .hash 符号散列表
- .init 初始化代码
- .symtab 符号表
- .text 可执行的指令
- .plt 过程链接表
- .rodata 只读数据
- .dynamic 动态链接信息
程序头表
通过这些信息,系统函数exec()和链接程序合作,为可执行程序在内存中创建进程映像。该过程如下:
- 将可执行文件的段加入内存
- 加载所有需要的共享库
- 需要时重定向可执行文件及其共享对象
- 将控制权交给程序