-I : 输入文件的格式(binary, elf32-i386等)
-O : 输出文件的格式
-B : 二进制文件体系结构(i386, arm等)
-R : 删除不用的section(.comment .note 等)
-j : 仅留下有用的section(.text .data 等)
-S : 不复制重定位和符号信息
-K : 保留某个符号
-N : 去掉某个符号
-L : 使某个符号local化
-W : 使某个符号weaken化
例如: objcopy -S -O binary -j .text a.out a.bin 只保留.text的二进制文件.
2. objdump 显示目标文件信息
-f : 显示文件头信息(参考readelf -h)
-d : 反汇编目标文件中需要执行指令的section
-D : 反汇编目标文件中所有的section
-h : 显示section 头信息(参考readelf -S)
-x : 显示所有信息(参考readelf -a)
-s : 显示各个section的十六进制码以及对应的ascii码
-m : CPU架构
-b : 目标文件格式,默认elf32,可以指定为binary二进制格式.
例如: objdump -D -b binary -m i386 a.bin 对二进制文件进行反汇编
3. readelf 显示目标elf文件信息
-a : 显示所有信息-h : 显示elf头信息
-l : 显示Program Header Table中的每个Entry信息
-S : 显示Section Header Table中的每个Entry信息
-g : 显示Section Group信息
-s : 显示Symbol Table中的每个Entry信息
-e : 等同于 -h + -l + -s
-n : 显示.note段信息
-r : 显示可重定位信息
-d : 显示Dynamic Section信息
4. nm 列出目标文件中的符号
-a : 列出所有符号,包括debugger-only的符号.
-A : 显示文件名
-g : 只显示外部符号
-C : 将低级符号解码(demangle)成用户级名字,使C++函数名具有可读性.
-D : 显示Dynamic符号
-u : 仅显示没有定义的符号
-r : 反序显示
-n : 按地址顺序显示
nm列出符号的地址,符号类型和符号名字.其中符号说明如下:
A : 绝对地址,链接时不改变.
B : 符号位于bss数据段
C : 符号为common. common symbol是未初始化数据段(参考汇编文件中.common)
D : 已初始化数据段中的符号
G : 符号位于已初始化数据段中,重要用于small data object提高访问速度.
I : 该符号是对另一个符号的间接引用
N : 该符号是一个debugging符号
R : 只读数据去符号(C语言中的const修饰)
S : 符号位于非初始化数据区,用于small object
T : 符号位于text section
U : 符号未定义
V : 该符号是一个weak object
W : 弱符号
? : 类型未定义