参考
整体流程
预处理、编译、汇编、链接
# 预编译
gcc -E xx.c -o xx.i
# 编译(产生汇编代码)
gcc -S xx.i -o xx.s
# 汇编(产生机器码)
as xx.s -o xx.o
# 链接
ld xxxx
目标文件分析
目标文件包含:
- 机器指令代码(.code、.text)
- 数据(.data):全局变量、局部静态变量
- 符号表
- 调试信息
- 字符串
- .bss:未初始化(全局变量、局部静态变量)
objdump -h xxx.o
readelf -h xxx.o
Segment和Section
Section
readelf -S
段表描述了section,按数据使用类型(代码段,数据段等)来划分Segment
readelf -l
程序头描述了segment,按数据使用权限(可读,可写,可执行)划分动态链接库
- 静态共享库
- 装载时重定位
- 地址无关代码
- 模块内部的函数调用、跳转
- 模块内部的数据访问
- 模块外部的函数调用、跳转
Loading Comments...