2

在 Bash shell 中:

$ echo "0xe1 0x4f" | llvm-mc-3.2 -disassemble -triple i386 
    .section    __TEXT,__text,regular,pure_instructions
    loope   79
$ echo -n "\xe1\x4f" | ndisasm -b 32 -                    
00000000  E14F              loope 0x51

但是 0x51 是十进制的 81。

4

1 回答 1

4

它应该真正拆卸为

loope *+79

即循环分支相对向前79个字节。现在在 ndisasm 情况下,指令位于地址 0(因此下一条指令,即计算相对分支的内容,是地址 2),因此它为您计算目标(绝对)地址:2+79 = 81 (0x51)

于 2013-05-18T19:03:43.443 回答