在 Google Native Client 的论文中,作者定义了一个 nacljmp
如这两条指令:
and $0xffffffe0, %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)
对应于 jmp [eax]
在英特尔语法中。它将跳转到存储在寄存器 eax
指向的 32 位内存位置的地址。 .
关于assembly - jmp 指令 *%eax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802831/