objdump
objdump是在类Unix操作系统上显示关于目标文件的各种资讯的命令行程序。例如,它可用作反汇编器来以汇编代码形式查看可执行文件。它是GNU Binutils的一部分,用于在可执行文件和其他二进制数据上进行精细粒度控制。objdump使用BFD库来读取目标文件的内容。类似工具还有readelf、Microsoft DUMPBIN和Borland TDUMP。
操作系统 | Unix和类Unix |
---|---|
类型 | 命令 |
许可协议 | GNU GPL |
注意在特定平台(比如Mac OS X)上,objdump二进制文件可能实际上被连接到llvm的objdump,它有着不同的命令选项和表现。
例子
编辑比如对nm条目的例子代码编译成的目标文件test.o执行如下命令:
$ objdump -d -r test.o | grep main.: -A21
-d选项指示进行反汇编,-r选项指示穿插上重定位入口项,默认将汇编代码用AT&T语法展示。接着将它重定向到grep,它查找main函数连带显示其后21行。结果输出为:
0000000000000045 <main>:
45: 55 push %rbp
46: 48 89 e5 mov %rsp,%rbp
49: 48 83 ec 10 sub $0x10,%rsp
4d: 89 7d fc mov %edi,-0x4(%rbp)
50: 48 89 75 f0 mov %rsi,-0x10(%rbp)
54: c7 05 00 00 00 00 01 movl $0x1,0x0(%rip) # 5e <main+0x19>
5b: 00 00 00
56: R_X86_64_PC32 .bss-0x8
5e: bf 02 00 00 00 mov $0x2,%edi
63: e8 00 00 00 00 callq 68 <main+0x23>
64: R_X86_64_PLT32 global_function-0x4
68: 89 05 00 00 00 00 mov %eax,0x0(%rip) # 6e <main+0x29>
6a: R_X86_64_PC32 global_var-0x4
6e: bf 03 00 00 00 mov $0x3,%edi
73: e8 00 00 00 00 callq 78 <main+0x33>
74: R_X86_64_PLT32 extern_function-0x4
78: 89 05 00 00 00 00 mov %eax,0x0(%rip) # 7e <main+0x39>
7a: R_X86_64_PC32 extern_var-0x4
7e: b8 00 00 00 00 mov $0x0,%eax
83: c9 leaveq
84: c3 retq
可使用-M intel选项选用intel语法展示。