objdump -d输出汇编的含义

时间:2014-02-13 00:19:47

标签: c assembly objdump

我想弄清楚这个objdump -d的所有元素是什么意思。

例如我有:

08048b50 <phase_1>:
8048b50:    83 ec 1c                sub    $0x1c,%esp
 8048b53:   c7 44 24 04 68 a2 04    movl   $0x804a268,0x4(%esp)
 8048b5a:   08 
 8048b5b:   8b 44 24 20             mov    0x20(%esp),%eax
 8048b5f:   89 04 24                mov    %eax,(%esp)
 8048b62:   e8 63 04 00 00          call   8048fca <strings_not_equal>
 8048b67:   85 c0                   test   %eax,%eax
 8048b69:   74 05                   je     8048b70 <phase_1+0x20>
 8048b6b:   e8 f5 06 00 00          call   8049265 <explode_bomb>
 8048b70:   83 c4 1c                add    $0x1c,%esp
 8048b73:   c3                      ret    

具体来说,我不确定第1列和中间列告诉我的是什么

2 个答案:

答案 0 :(得分:4)

第一列告诉您代码在运行时所在的内存地址。

第二列具有可执行指令的十六进制版本。

第三列(和第四列)具有第二列的反汇编版本。即操作码和操作数。

答案 1 :(得分:0)

第一个:地址,十六进制。 两个相邻地址之间的差异是机器码的数量。

second : 机器码,十六进制。

第三个:汇编代码,从机器代码反汇编。


执行'objdump -no-leading-addr -S **.o',第一列将被隐藏。


objdump --version 苹果 LLVM 版本 11.0.0 (clang-1100.0.33.17)