为什么0xE1 0x4F会反汇编到LLVM和NDISASM中的不同指令?

时间:2013-05-18 18:55:52

标签: x86 llvm nasm

在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。

1 个答案:

答案 0 :(得分:4)

它应该真的反汇编为

loope *+79

也就是说,循环分支相对前进79个字节。现在在ndisasm情况下,指令位于地址0(所以下一条指令,即相对分支计算出来的是地址2),因此它为你计算目标(绝对)地址:2 + 79 = 81 (0x51)