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) の特徴の1 つです。一部の命令は、15 バイトの長さになる場合があります。

ここは何も問題ありませんotool

于 2010-08-22T22:12:20.400 に答える