Skip to content

Commit

Permalink
update PL.md
Browse files Browse the repository at this point in the history
  • Loading branch information
zhendewokusi committed Feb 6, 2024
1 parent a960fb1 commit b904967
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions source/_posts/DPL-CPL-RPL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: DPL CPL RPL 辨析
title: DPL CPL RPL
date: 2024-02-04 00:21:51
tags:
---
Expand All @@ -10,7 +10,7 @@ tags:
- 编译器: nasm

**---以下均是我的个人笔记,如有错误,敬请指正.---**

<!-- more -->
# DPL

DPL全称是`Descriptor Privilege Level`,描述符特权级.这里是在保护模式设置段描述符的时候进行确认的,比如内核d代码段的特权级别是0,用户程序代码段的特别级别是3,这是在设置描述符的时候就确定的.我还是在此解释一下什么是描述符.
Expand Down Expand Up @@ -244,4 +244,5 @@ RPL的产生就是为了解决系统调用越权问题,系统调用的实现中,
我们先来看左侧调用,正常使用一切安好,但是,如果传入的内核数据源所在段的选择子以及内核的偏移地址呢?这并不是不可能的,GDT表中元素没有很多,暴力一个个尝试也不是不可以。这不就将内核的数据拷贝进了用户的缓冲区,相当于用户可以访问内核才能访问的数据。

再看右侧的调用,右侧本身是不可行的,也是通过暴力尝试GDT表中的元素找到内核的数据段,这样用户就可以修改内核才能修改的数据。好了,用户既能查看还能修改,保护形同虚设。但是又不能一棒子打死,用户态做不了的事情必须让内核出手,此时RPL就很好的解决了这个问题,问题根儿不能在于CPU不知道访问者的真实身份,它不知道这是用户通过门调用进入内核的,所以这里的RPL就起到这个作用,让CPU知道真正访问这些资源的是谁,内核还是用户。
哎,又懒得敲字了

现代OS基本上都弃用了调用门,使用中断门来实现系统调用。

0 comments on commit b904967

Please sign in to comment.