X86 为什么0xE1 0x4F在LLVM和NDISAM中反汇编成不同的指令?

X86 为什么0xE1 0x4F在LLVM和NDISAM中反汇编成不同的指令?,x86,llvm,nasm,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的

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

它应该像

loope *+79

也就是说,循环分支相对转发79字节。现在在NDISSM的情况下,指令位于地址0(因此下一条指令,即计算相对分支的指令,是地址2),因此它为您计算目标(绝对)地址:2+79=81(0x51)

它实际上应该按如下方式反汇编

loope *+79
也就是说,循环分支相对转发79字节。现在在NDISSM的情况下,指令位于地址0(因此下一条指令,即计算相对分支的指令,是地址2),因此它为您计算目标(绝对)地址:2+79=81(0x51)