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 *%eaxis 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.