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

标签 windows 64-bit x86-64 disassembly opcode

我一直在努力理解 ASM x64 指令的 0x40 REX 操作码的用途。例如,在 Kernel32.dll 的函数序言中:

enter image description here

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

40 53      push        rbx 

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

enter image description here

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

enter image description here

所以 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/

相关文章:

c - ELF - 更改入口点时出现 SEGFAULT

linux - 在运行时将代码注入(inject)可执行文件

c - 使用内联汇编时出现段错误(核心转储)错误

c++ - 数组参数的完整性检查(strlen 等)

windows - 是否保证在每个使用它的进程中将相同的 DLL 映射到相同的虚拟地址?

windows - panic : net: inconsistent fdMutex

x86 - 为什么 32 位驱动程序在 64 位上不起作用

windows - 适用于 Windows 的 iPhone 模拟器

windows - Windows HANDLE 在 64 位应用程序上的范围是多少?

c++ - ENOMEM 创建线程失败的原因?