(抱歉英语不好......)
我有两个问题。
在x86 Linux中,我知道由于CPU权限级别,CS很重要。但是,我也不知道为什么DS也应该是两个。(__ USER_DS,__ KERNEL_DS)。
我很困惑,因为用户数据段和内核数据段之间的唯一区别是" DPL"。并不重要,因为内核代码以CPL 0运行。(我错了吗?)
所以,我想知道为什么在用户模式和内核模式之间更改模式时内核也必须更改数据段。
换句话说,我认为在平面内存模型中只有一个数据段选择器就足够了。平面内存模型中数据段选择器的DPL含义是什么?
要防止用户模式代码访问内核空间(例如,像" mov $ eax,DS:* 0xc1000000"),使用哪种机制?分段或分页?
我认为用户代码可以寻址内核空间,因为用户数据段包含内核区域。因此,必须是阻止此类访问的分页机制。对?你能解释一下更多细节吗?
提前谢谢你。