我一直在试图理解这个的目的0x40
ASM x64 指令的 REX 操作码。例如,在 Kernel32.dll 的函数序言中:
正如你所看到的,他们使用push rbx
as:
40 53 push rbx
但仅使用53h
操作码(不带前缀)也会产生相同的结果:
根据这个网站 https://www-user.tu-chemnitz.de/~heha/viewchm.php/hs/x86.chm/x64.htm#Encoding,REX前缀的布局如下:
So 40h
操作码似乎没有做任何事情。有人可以解释其目的吗?
the 04xh
字节(即040h
, 041h
... 04fh
) 确实是 REX 字节。正如您在问题中列出的那样,下半字节中的每一位都有其含义。价值040h
意思是REX.W
, REX.R
, REX.X
and REX.B
都是0
。这意味着添加这个字节不会对该指令执行任何操作,因为您没有覆盖any默认REX位,并且它不是以AH/BH/CH/DH作为操作数的8位指令。
此外,X
, R
and B
位都对应于一些操作数。如果您的指令不消耗这些操作数,则相应的 REX 位将被忽略。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)