x86 jmp asterisk%eax

2 x86 assembly att

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

and   $0xffffffe0, %eax   # Clears the 5 least significant bits in %eax.
jmp   *%eax
Run Code Online (Sandbox Code Playgroud)

首先,我可以看到它们清除了5个最不明显的位,使指令在跳转到之前进行32位对齐.但是,%eax之前的星号是什么意思?我已经搜索了许多关于x86程序集的教程而没有太多运气.

Mic*_*ael 7

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

跳转到r/m32中给出的绝对间接地址.

相同类型的跳转指令的另一种形式与Intel语法jmp *(%eax)相对应jmp [eax].它将跳转到寄存器指向的32位存储单元中存储的地址eax.