linux对i386保护模式的选择性使用

i386中在每个段选择子中都有两个位来表示访问该选择子的最低权限,称为DPL。linux使用0(二进制00)和3(二进制11)两个权限级别。
    对于linux而言,只有四个选择子:用户CS选择子,用户DS选择子,内核CS选择子,内核DS选择子。它们保存在GDT的3到6的位置(即下标2-5)。
    i386中存在cs,ds,ss寄存器。cs寄存器中存放用户或者内核CS选择子,ds寄存器和ss寄存器的内容相同,存放用户或者内核DS选择子。
    当linux处于用户态的时候,寄存器中存放用户选择子;内核态时则存放内核选择子。
    cs寄存器存放的选择子的DPL称为CPL,表示当前操作系统所处的权限级别。
    i386规定,只有DPL小于或者等于要访问的选择子的CPL时,访问才能通过。这样,因为不同的段选择子对应着不同的线性地址,所以可以控制低级别的代码无法访问高级别的内存地址。
    但linux却对四个选择子都设置了同样的地址空间,这就放弃了i386的段保护机制。而其保护机制则是通过在每个页表项中设置两位表示访问该页的最低权限。当CPL低于或者等于该权限时,则可以访问该页。
    因为仍然要使用CPL,所以还是无法完全绕过段机制。因为CPL正是CS寄存器所保存的段选择子(可以是内核或用户cs段选择子)的DPL位段。
    另外,当linux通过中断门或trap门进入内核时,会改变cs寄存器为内核cs选择子;当返回时,恢复用户cs选择子。通过这种方式来实现CPL的改变。

来自:http://www.newsmth.net/pc/pccon.php?id=1363&nid=264166

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值