在针对Google Native Client的论文中,作者将nacljmp
定义为以下两个说明:
and %eax, 0xffffffe0 // Clears the 5 least significant bits in %eax.
jmp *%eax
首先,我看到他们清除了5个最低有效位,以使该指令在跳转到32位之前对齐。但是,星号在%eax
之前是什么意思?我搜索了很多有关x86汇编的教程,但运气不佳。
jmp *%eax
是jmp eax
的AT&T语法,这是jmp r/m32
的一种形式。它将跳转到寄存器eax
中包含的地址:
跳转到绝对间接地址,在r / m32中给出。
相同类型的跳转指令的另一种形式是jmp *(%eax)
,它对应于Intel语法中的jmp [eax]
。它会跳到寄存器eax
指向的32位存储位置中存储的地址。