Bła*_*lik 5 x86 assembly x86-64 opcode opcodes
我的问题源于一个简单的好奇心:
为什么在x64中某些操作码是无效的(例如06,07),而在x86中用于相当基本的指令(06和07是推送和弹出)?我认为那些最简单的指令在两种架构中都能很好地完成.
为什么他们在x64中禁用了一些简单的指令?他们为什么不工作?为什么他们禁用某些操作码,在操作码列表中创建漏洞,何时可以将它们分配给x64版本的指令?
参考:
32位模式下的06和07操作码是指令PUSH ES和POP ES.在64位模式下,段寄存器CS,DS,ES和SS不再用于确定存储器地址:处理器假定基址为0且没有大小限制.由于现在通常没有理由让应用程序(操作系统本身除外)访问这些寄存器,因此删除了用于更改和访问它们的操作码.
FS和GS段寄存器仍然可以在64位模式下设置基址,因此与它们相关的操作码尚未被删除.