I've been trying to understand the purpose of the 0x40
REX opcode for ASM x64 instructions. Like for instance, in this function prologue from Kernel32.dll:
As you see they use push rbx
as:
40 53 push rbx
But using just the 53h
opcode (without the prefix) also produces the same result:
According to this site, the layout for the REX prefix is as follows:
So 40h
opcode seems to be not doing anything. Can someone explain its purpose?
the 04xh
bytes (i.e. 040h
, 041h
... 04fh
) are indeed REX bytes. Each bit in the lower nibble has a meaning, as you listed in your question. The value 040h
means that REX.W
, REX.R
, REX.X
and REX.B
are all 0
. That means that adding this byte doesn't do anything to this instruction, because you're not overriding any default REX bits, and it's not an 8-bit instruction with AH/BH/CH/DH as an operand.
Moreover, the X
, R
and B
bits all correspond to some operands. If your instruction doesn't consume these operands, then the corresponding REX bit is ignored.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With