我一直在尝试了解ASM 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位。
关于windows - ASM x64中40h REX操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50260055/