我一直在尝试了解ASM x64指令0x40 REX操作码的用途。例如,在此函数的序言中,来自Kernel32.dll:

windows - ASM x64中40h REX操作码的用途是什么?-LMLPHP

如您所见,他们将push rbx用作:

40 53      push        rbx

但是仅使用53h操作码(不带前缀)也会产生相同的结果:

windows - ASM x64中40h REX操作码的用途是什么?-LMLPHP

根据this site,REX前缀的布局如下:

windows - ASM x64中40h REX操作码的用途是什么?-LMLPHP

因此40h操作码似乎什么也没做。有人可以解释它的目的吗?

最佳答案

04xh字节(即040h041h ... 04fh)确实是REX字节。正如您在问题中列出的那样,下半字节的每一位都有含义。值040h表示REX.WREX.RREX.XREX.B均为0。这意味着添加此字节不会对该指令产生任何影响,因为您不会覆盖任何默认的REX位,并且它不是以AH/BH/CH/DH作为操作数的8位指令。

此外,XRB位均对应于某些操作数。如果您的指令不使用这些操作数,则将忽略相应的REX位。

关于windows - ASM x64中40h REX操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50260055/

10-09 06:38