assembly - x86 长模式特定指令在保护模式下可用吗?

标签 assembly x86 disassembly protected-mode

嘿,我想知道一些只在长模式下有效的指令。

例如 0f 20 55 - mov rbp, cr2

我引用的是 ref.x86asm.net xml mapping .
根据 xml,该指令的操作模式是 e,这意味着:

e applies for 64-bit mode. SMM is not taken into account. 63 MOVSXD

现在,如果我看一下反汇编程序,例如 GCCcapstone ,字节流 0f 20 55 在保护模式下被解码为 mov ebp, cr2,尽管引用资料说它不应该在 x64 以外的模式下可用。

所以我想知道是不是我没有理解某些东西,或者这些反汇编程序出了问题?

最佳答案

进出控制寄存器的移动在保护模式和长模式下可用,使用相同的编码,但具有不同的含义mov rbp, cr2 仅在长模式下可用(显然,它写入仅在长模式下存在的 64 位 GPR)并且 mov ebp, cr2 仅在 protected 模式下可用模式(在长模式中并非天生不可能,但它的编码被重用于 mov rbp, cr2,就像 push eax 的编码被重用于表示 推送 rax)。反汇编程序根据模式正确地解释了相同的机器代码。

关于assembly - x86 长模式特定指令在保护模式下可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69198685/

相关文章:

C++ double representation asm 收藏

disassembly - 在linux下反汇编windows exe文件的方法

c - 将一些流水线翻译成 C 代码

c++ - 链接 C++ 和程序集时出现段错误

assembly - 如何在不使用 LUI 的情况下将 32 位常量加载到寄存器

assembly - 在x86程序集中打印寄存器值的简单方法

c++ - 为什么这个函数会把RAX压栈作为第一个操作呢?

c - 这个shellcode又让人头疼

optimization - 重构反汇编代码

c - 无法识别的仿真模式 : elf_i386 on MinGW32