跳转指令 *%eax

jmp instruction *%eax

在 Google Native Client 的论文中,作者定义了一个 nacljmp 作为这两条指令:

and   [=10=]xffffffe0, %eax   # Clears the 5 least significant bits in %eax.
jmp   *%eax

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

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

我搜索了很多关于 x86 汇编的教程,但都不太顺利。

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

中包含的地址

Jump near, absolute indirect, address given in r/m32.

同类型跳转指令的另一种形式是jmp *(%eax),对应Intel语法中的jmp [eax]。它将跳转到存储在寄存器 eax.

指向的 32 位内存位置的地址