【问题标题】:jmp instruction *%eaxjmp 指令 *%eax
【发布时间】:2015-06-12 12:15:11
【问题描述】:

在 Google Native Client 的论文中,作者将nacljmp 定义为以下两条指令:

and   $0xffffffe0, %eax   # Clears the 5 least significant bits in %eax.
jmp   *%eax

首先,我可以看到他们清除了 5 个最低有效位,以便在跳转到它之前将指针向下舍入到 32 字节对齐边界。也许对于使用低 5 位数据的标记指针实现。

但是,%eax 之前的星号是什么意思?

我搜索了许多关于 x86 汇编的教程,但没有太多运气。

【问题讨论】:

  • 可能是eax的值所指向的内存地址的32位数据内容?
  • @lurker:是的,这是一个间接跳转,但它是 *%eax 没有括号。

标签: assembly x86 att


【解决方案1】:

jmp *%eaxjmp eax 的 AT&T 语法,它是jmp r/m32 的一种形式。它将跳转到寄存器eax中包含的地址:

近跳,绝对间接,r/m32 中给出的地址。

同类型跳转指令的另一种形式是jmp *(%eax),它对应于Intel语法中的jmp [eax]。它会跳转到存储在寄存器eax指向的32位内存位置的地址。

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多