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