首页 > 解决方案 > ASM x64 中 40h REX 操作码的目的是什么?

问题描述

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

在此处输入图像描述

如您所见,它们push rbx用作:

40 53      push        rbx 

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

在此处输入图像描述

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

在此处输入图像描述

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

标签: windows64-bitx86-64disassemblyopcode

解决方案


04xh字节(即,040h... 041h04fh确实是 REX 字节。正如您在问题中列出的那样,低半字节中的每一位都有一个含义。该值040h表示REX.WREX.RREX.X都是REX.B0这意味着添加此字节不会对该指令执行任何操作,因为您没有覆盖任何默认 REX 位,并且它不是以 AH/BH/CH/DH 作为操作数的 8 位指令。

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


推荐阅读