在 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个字节。现在,在 ndisasm 情况下,指令位于地址 0(因此下一条指令(计算相对分支的指令)是地址 2),因此它会为您计算目标(绝对)地址:2+79 = 81 (0x51)
关于x86 - 为什么 0xE1 0x4F 在 LLVM 和 NDISASM 中反汇编为不同的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627852/