跳转指令 *%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 *%eax
是 jmp eax
的 AT&T 语法,它是 jmp r/m32
的一种形式。它将跳转到寄存器 eax
:
中包含的地址
Jump near, absolute indirect, address given in r/m32.
同类型跳转指令的另一种形式是jmp *(%eax)
,对应Intel语法中的jmp [eax]
。它将跳转到存储在寄存器 eax
.
指向的 32 位内存位置的地址
在 Google Native Client 的论文中,作者定义了一个 nacljmp
作为这两条指令:
and [=10=]xffffffe0, %eax # Clears the 5 least significant bits in %eax.
jmp *%eax
首先,我可以看到他们清除了 5 个最低有效位,以便在跳转到之前将指针向下舍入到 32 字节对齐边界。也许对于使用低 5 位数据的标记指针实现。
但是%eax
前面的星号是什么意思?
我搜索了很多关于 x86 汇编的教程,但都不太顺利。
jmp *%eax
是 jmp eax
的 AT&T 语法,它是 jmp r/m32
的一种形式。它将跳转到寄存器 eax
:
Jump near, absolute indirect, address given in r/m32.
同类型跳转指令的另一种形式是jmp *(%eax)
,对应Intel语法中的jmp [eax]
。它将跳转到存储在寄存器 eax
.