为什么otool的第一列结果不连续?

时间:2010-08-22 21:09:22

标签: assembly otool

如果这是一个真正的菜鸟问题,我很抱歉。我正在使用otool来反汇编文件,这是我感兴趣的方法的结果:

_KTDriverIsRunning:
0000000000000d98 pushq %rbp
0000000000000d99 movq %rsp,%rbp
0000000000000d9c xorl %eax,%eax
0000000000000d9e testq %rdi,%rdi
0000000000000da1 je 0x00000dac
0000000000000da3 xorl %eax,%eax
0000000000000da5 cmpl $__mh_dylib_header,0x14(%rdi)
0000000000000da9 setne %al
0000000000000dac movzbl %al,%eax
0000000000000daf leave
0000000000000db0 ret

如您所见,第一列不是连续的。这是否意味着有一些otool无法拆解的说明?或者这是否意味着某些汇编指令只有不同长度的实际(机器)指令?

谢谢!

1 个答案:

答案 0 :(得分:3)

某些装配说明只有不同长度的实际(机器)指令。

例如,pushq %rbp长度为1个字节(55),但testq %rdi,%rdi需要3个字节来表示(48 85 ff)。这种可变长度编码是the characteristic of x86(-64)之一。有些指令可能长达15个字节。

此处otool没有任何问题。