首页 > 解决方案 > 英特尔平板内存模型

问题描述

在英特尔平面内存模型中,总是使用 2 个 GDT 索引,CODE 段,DATA 段,我可以在平面内存模型中使用更多的 GDT 索引吗?我的要求是拥有一个带有 RO 的内存区域,该区域现在位于数据段中。

标签: assemblymemoryx86osdevgdt

解决方案


是的,您可以使用尽可能多的 GDT 条目以供您使用。但是一次只能激活 6 个,因为只有 6 个段寄存器: CS SS DS ES FS GS. 请注意,同一描述符可以加载到多个寄存器中。

此外,同一内存区域可以由多个段映射,但具有不同的属性。特别是,实际上要求 SS(堆栈)区域可读取/写入。如果它使用与 DS 相同的地址空间并且您希望 DS 是只读的,那么从 RW/RO 的角度来看,DS 至少与 SS 不同。

同样,为了方便,使用 MOVS/CMPS/SCAS/LODS 指令将 DS 和 ES 映射到同一个空间是很常见的。


推荐阅读