问题描述
在 x86-64 cpu 上,是否可以切换到虚幻模式并能够使用超过 32 位的内存寻址?
通常,可以通过首先进入保护模式,设置一个GDT(全局描述符表)条目,基数为 0,限制为 0xFFFFF,粒度设置。当使用适当的选择器加载段寄存器时,段描述符缓存将数据存储在 GDT 条目中,即使切换回实模式时也保持不变,允许使用诸如 loadall
之类的东西访问完整的 4GB 范围。唯一的警告是它对代码段不起作用,因为中断改变了 DS:[EBX]
并破坏了 CS
的上半部分。
我知道在 64 位长模式下分段是禁用的,因此无法设置具有 64 位段限制的 GDT。但是,使用 MSR(模型特定寄存器)可以设置 EIP
和 FS
64 位基地址。切换回实模式时,此设置是否保持不变,以便可以使用 GS
和 FS
访问高于 0xFFFFFFFF 的地址?或者也许有另一种完全不同的方式来做到这一点?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)