我一直在努力了解AS40 x64指令的0x40 REX操作码的用途.例如,在Kernel32.dll的这个函数序言中:
如您所见,他们使用push rbx作为:
40 53 push rbx
但仅使用53h操作码(不带前缀)也会产生相同的结果:
根据this site,REX前缀的布局如下:
所以40h操作码似乎没有做任何事情.有人可以解释它的目的吗?
最佳答案 04xh字节(即040h,041h … 04fh)确实是REX字节.正如您在问题中列出的那样,下半字节中的每个位都有含义.值040h表示REX.W,REX.R,REX.X和REX.B都为0.这意味着添加该字节对该指令没有任何作用,因为您没有覆盖任何默认的REX位,并且它不是带有AH / BH / CH / DH作为操作数的8位指令.
此外,X,R和B位都对应于一些操作数.如果指令不消耗这些操作数,则忽略相应的REX位.