In the paper for Google Native Client, the authors define a nacljmp
as these two instructions:
and $0xffffffe0, %eax # Clears the 5 least significant bits in %eax.
jmp *%eax
First, I can see they clear the 5 least significant bits to round the pointer down to a 32-byte alignment boundary before jumping to it. Perhaps for a tagged-pointer implementation using the low 5 bits for data.
However, what does the asterisk mean before %eax
?
I've searched a number of tutorials on x86 assembly without much luck.
jmp *%eax
is AT&T syntax forjmp eax
, which is one form ofjmp r/m32
. It will jump to the address contained in registereax
:Another form of the same type of jump instruction is
jmp *(%eax)
which corresponds tojmp [eax]
in Intel syntax. It would jump to the address stored at the 32-bit memory location pointed to by registereax
.