x86 - 为什么 0xE1 0x4F 在 LLVM 和 NDISASM 中反汇编为不同的指令?

标签 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。

最佳答案

它确实应该反汇编为

loope *+79

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

关于x86 - 为什么 0xE1 0x4F 在 LLVM 和 NDISASM 中反汇编为不同的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627852/

相关文章:

c++ - 使用 masm 编译程序集文件时表达式中缺少运算符

c++ - LoadInst 和 StoreInst 值和地址 LLVM

x86 - 将 32 位解包为 32 字节 SIMD 向量的最快方法

assembly - SIMD 按变量旋转

gcc - llvm-gcc 和 clang 二进制文件与 gcc 兼容吗? - 特别是 Windows 上的 mingw gcc

c++ - 获取 llvm 指令的 use 和 def

malloc - NASM malloc 返回 NULL

NASM 获取控制台大小

macos - NASM:x86 到 PPC - 表达式语法错误

assembly - 汇编中标签和函数的区别 - Intel 语法