x86 长模式特定指令在保护模式下可用吗?
x86 long mode specific instructions available on protected mode?
嘿,我想知道一些只在长模式下有效的指令。
例如0f 20 55 - mov rbp, cr2
.
我引用了参考文献x86asm.net xml mapping.
根据xml,这条指令的操作模式是e
,意思是:
e applies for 64-bit mode. SMM is not taken into account. 63 MOVSXD
现在,如果我查看 GCC or capstone 等反汇编程序,字节流 0f 20 55
将在保护模式下被解码为 mov ebp, cr2
,即使参考资料说它不应该被解码在 x64 以外的模式下可用。
所以我想知道是我没听懂还是这些反汇编程序出了问题?
在保护模式和长模式下可以使用相同的编码,但具有不同的含义,可以在控制寄存器中移动和移动控制寄存器。 mov rbp, cr2
仅在长模式下可用(显然,它写入仅存在于长模式下的 64 位 GPR)并且 mov ebp, cr2
仅在保护模式下可用(在长模式下并非天生不可能,但它的编码被重新用于 mov rbp, cr2
,正如 push eax
的编码被重新用于表示 push rax
)。反汇编程序根据模式正确地解释了相同的机器代码。
嘿,我想知道一些只在长模式下有效的指令。
例如0f 20 55 - mov rbp, cr2
.
我引用了参考文献x86asm.net xml mapping.
根据xml,这条指令的操作模式是e
,意思是:
e applies for 64-bit mode. SMM is not taken into account. 63 MOVSXD
现在,如果我查看 GCC or capstone 等反汇编程序,字节流 0f 20 55
将在保护模式下被解码为 mov ebp, cr2
,即使参考资料说它不应该被解码在 x64 以外的模式下可用。
所以我想知道是我没听懂还是这些反汇编程序出了问题?
在保护模式和长模式下可以使用相同的编码,但具有不同的含义,可以在控制寄存器中移动和移动控制寄存器。 mov rbp, cr2
仅在长模式下可用(显然,它写入仅存在于长模式下的 64 位 GPR)并且 mov ebp, cr2
仅在保护模式下可用(在长模式下并非天生不可能,但它的编码被重新用于 mov rbp, cr2
,正如 push eax
的编码被重新用于表示 push rax
)。反汇编程序根据模式正确地解释了相同的机器代码。