1

如果这是一个真正的菜鸟问题,我很抱歉。我正在使用 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无法反汇编的?或者这是否意味着某些汇编指令与实际(机器)指令的长度不同?

谢谢!

4

1 回答 1

3

一些汇编指令只是具有不同长度的实际(机器)指令。

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

这里没有什么问题otool

于 2010-08-22T22:12:20.400 回答