objdump

objdump是在类Unix操作系统上显示关于目标文件的各种信息的命令行程序。例如,它可用作反汇编器来以汇编代码形式查看可执行文件。它是GNU Binutils的一部分,用于在可执行文件和其他二进制数据上进行精细粒度控制。objdump使用BFD库来读取目标文件的内容。类似工具还有readelfMicrosoft DUMPBINBorland TDUMP

objdump
操作系统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语法展示。

参见

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.