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語法展示。