日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學習交流加

  • 個人qq:
    1126137994
  • 個人微信:
    liu1126137994
  • 學習交流資源分享qq群:
    962535112

上一篇文章學習了保護模式下的任務與任務隔離,以及簡單介紹了保護模式下的特權級的概念。點擊鏈接查看上一篇文章:任務與任務隔離

今天具體來學習一下保護模式下的特權級保護。

主要學習以下內(nèi)容;

  • 描述符特權級(目標對象的特權級)DPL

  • 當前特權級CPL

  • 低特權級的應用調用高特權級的操作系統(tǒng)代碼的兩種方法

    • 第一種方法是將高特權級的代碼段定義為依從的
    • 第二種方法是使用調用門
  • 請求特權級RPL

文章目錄

  • 1、描述符特權級DPL
  • 2、當前特權級CPL
  • 3、如何將代碼段轉移到另一個代碼段
    • 3.1 將高特權級的代碼段定義為依從的
    • 3.2 調用門
  • 4、總結

1、描述符特權級DPL

實施特權級保護的第一步,是為所有可管理的對象賦予一個特權級,以決定誰能訪問它們。在這篇文章中保護模式二:段描述符,我們學習了描述符的格式,如下圖。

每個描述符都有一個兩比特的DPL字段。可取值為0,1,2,3 。DPL是每個描述符都有的字段,稱為描述符特權級,而描述符總是指向它所描述的目標的對象,代表著該對象,因此,該字段實際上是目標對象的特權級。

比如對于數(shù)據(jù)段來說,DPL決定了訪問它們所應具備的最低特權級別。如果一個描述符的DPL字段為2,那么能夠訪問該數(shù)據(jù)段的只有特權級為0,1,2的程序。當一個特權級為3的程序訪問該數(shù)據(jù)段的時候,將會被處理器阻止,并引發(fā)異常中斷。

對任何段的訪問都要先把該段的描述符加載到段寄存器,所以這種保護手段很容易實現(xiàn)。

2、當前特權級CPL

在實模式下,段寄存器存放的是段地址;而在保護模式下,段寄存器存放的是段選擇子與描述符高速緩存器。當處理器正在一個代碼段中取指令和執(zhí)行指令時,那個代碼段的特權級叫做當前特權級CPL。

正在執(zhí)行的這個代碼段,其選擇子位于段寄存器CS中,其最低兩位就是當前特權級的數(shù)值。

在一個任務中,有全局空間和局部空間。一般來說任務的全局空間是操作系統(tǒng)的函數(shù),特權級是0。任務的局部空間一般是任務自己的函數(shù),特權級是3。

那些只能在當前特權級CPL為0的時候才能執(zhí)行的指令,稱為特權指令。典型的特權指令如加載全局描述符表的lgdt、加載局部描述符表的指令lldt、停機指令hlt等。

3、如何將代碼段轉移到另一個代碼段

代碼段的特權級檢查是很嚴格的,一般來說,控制轉移只允許發(fā)生在兩個特權級相同的代碼段之間。

不過為了讓特權級低的用戶程序可以調用特權級高的內(nèi)核程序,處理器也提供了相應的解決辦法。

  • 第一種辦法是將高特權級的代碼定義為依從的
  • 使用調用門

3.1 將高特權級的代碼段定義為依從的

在這篇文章里保護模式二:段描述符,我們學習了段描述符,有一個TYPE字段。代碼段的TYPE字段有一個C位,如果C=0,這樣的代碼段只能供同特權級的代碼段調用;否則如果C=1,則這樣的代碼段稱為依從的代碼段,可以從特權級比它低的程序調用并進入。

注意,即使是將控制轉移到依從的代碼段,也必須是低特權級的程序調用高特權級的代碼并進入。而不能是從高特權級的代碼轉移到低特權級的代碼。內(nèi)核的代碼已經(jīng)很牛逼了,它是不會想要調用你的用戶程序的代碼的,就是這個道理。

上述轉移到依從代碼段的要求可以用一個表達式來傳達:

CPL>=目標代碼段描述符的DPL

依從的代碼段不是在它的DPL特權級上運行,而是在調用程序的特權級上運行。也就是說,當控制權轉移到依從的代碼段后,不改變當前特權級CPL,段寄存器CS的CPL不發(fā)生變化,被調用過程的特權級依從于調用者的特權級。這就是為什么它被稱為依從的代碼段。

3.2 調用門

除了依從大代碼段,另一種在特權級之間轉移控制的方法是使用門。

門是另一種形式的描述符。稱為門描述符,簡稱門。和段描述符不同,段描述符用于描述內(nèi)存段。門用于描述可執(zhí)行代碼,比如一段程序,一個過程,或者一個任務。

實際上,門的類型有好幾種。不同特權級之間的過程調用可以使用調用門;中斷門/陷阱門是作為中斷處理過程使用的;任務門對應單個的任務,用來執(zhí)行任務切換。在本文,我們重點學習調用門。

所有的描述符都是64位的,調用門描述符也不例外。在調用門的描述符中,定義了目標過程(例程)所在代碼段的選擇子,以及段內(nèi)偏移。要想使用調用門進行控制轉移,可以使用jmp far或者call far指令,并把調用門的=描述符的選擇子作為操作數(shù)。

使用jmp far指令,可以將控制通過門轉移到比當前特權級高的代碼段,但不改變當前特權級別。但是如果使用call far 指令,則當前特權級會提升到目標代碼段的特權級。

在繼續(xù)學習調用門前,我們有一個知識點需要補充。那就是請求特權級RPL。

我們知道,要將一個控制從一個代碼段轉移到另一個代碼段,通常是使用jmp或者call指令,并在指令中提供目標代碼的段選擇子,以及段內(nèi)偏移量。而為了訪問內(nèi)存中的數(shù)據(jù),也必須將段選擇子加載到寄存器DS、ES、FS或者GS。不管是實施控制轉移,還是訪問數(shù)據(jù),這都可以看成是一個請求,請求者提供一個段選擇子,請求訪問指定的段。從這個意義上來講,RPL也就是指請求者的特權級別。

在絕大多數(shù)情況下,請求者都是當前程序自己,因此CPL=RPL。要判斷請求者是誰,最簡單的方法是看誰提供的選擇子,誰就是請求者。

但是在一些并不多見的情況下,RPL和CPL并不相同。如下圖,特權級為3的應用程序,希望從硬盤讀一個扇區(qū),并傳送到自己的數(shù)據(jù)段,因此數(shù)據(jù)段的DPL是3.

上圖中,應用程序通過調用門調用內(nèi)核例程,請求者是用戶程序,即RPL=3.但是真正讀硬盤的是內(nèi)核例程,通過調用門會改變當前特權級,進入內(nèi)核示例后,CPL=0. 此時RPL與CPL就不相同。

不過,上面的例子只是表明RPL有可能與CPL不同,但是并沒有說明引入RPL到底有什么必要性。

我們再看下面的一個例子:

假設用戶程序不知道從哪里得知了操作系統(tǒng)內(nèi)核的數(shù)據(jù)段的選擇子。而且該用戶程序想要改變該內(nèi)核數(shù)據(jù)段的內(nèi)容。它雖然不可以直接讀寫內(nèi)核的數(shù)據(jù)段,但是它可以通過調用門,調用操作系統(tǒng)例程,當前特權級變?yōu)?,可以從硬盤讀數(shù)據(jù),并將他們寫到操作系統(tǒng)的數(shù)據(jù)段。這下就糟糕了,這肯定會破壞操作系統(tǒng)。

怎么辦????

看的出來,單純依靠處理器硬件的檢查機制無法解決這個難題,但它可以在原來的基礎上做增加一種檢查機制,并把如何通過這種檢查的規(guī)則交給軟件(編寫者)

那么此時RPL就派上用場了。每當處理器執(zhí)行一個將段選擇子傳送給段寄存器的指令時,會檢查以下兩個條件是否滿足。

  • 當前特權級CPL高于或者和數(shù)據(jù)段描述符的DPL相同。即在數(shù)值上有:CPL<=數(shù)據(jù)段描述符的DPL。
  • 請求特權級RPL高于或者和數(shù)據(jù)段描述符的DPL相同。即在數(shù)值上有:RPL<=數(shù)據(jù)段描述符的DPL。

如果以上兩個條件不能同時成立,處理器會阻止這種操作,并引發(fā)異常中斷。

所以在上圖所示的例子中,當用戶程序想要寫內(nèi)核的數(shù)據(jù)段,通過調用門調用內(nèi)核例程后,當前特權級CPL與數(shù)據(jù)段描述符的DPL都是0,滿足第一個條件。但是RPL=3,數(shù)據(jù)段的DPL=0,不滿足第二個條件,所以處理器引發(fā)異常中斷。

以上就是引入RPL的作用。它也是特權級保護的重要特性之一。

4、總結

最后我們來總結一下基本的特權級檢查規(guī)則。

  • 首先,將控制直接轉移到非依從的代碼段,要求當前特權級CPL和請求特權級RPL都等于目標代碼段的描述符的DPL。即在數(shù)值上有:

    CPL=目標代碼段描述符的DPL
    RPL=目標代碼段描述符的DPL

一個典型的例子就是jmp指令進行控制轉移(jmp指令不改變當前特權級)

  • 其次,要將控制轉移到依從的代碼段,要求當前特權級CPL和請求特權級RPL都低于或者和目標代碼的DPL相等。即在數(shù)值上有:

    CPL>=目標代碼段描述符的DPL
    RPL>=目標代碼段描述符的DPL

控制轉移后,當前特權級保持不變。

  • 第三,高特權級別的程序可以訪問低特權級別的數(shù)據(jù)段,但是低特權級別的程序不能訪問高特權級別的數(shù)據(jù)段。訪問數(shù)據(jù)段之前,肯定會修改數(shù)據(jù)段寄存器,在這個時候,要求當前特權級與請求特權級都必須高于或者和目標數(shù)據(jù)段的DPL相等。即在數(shù)值上有:

    CPL<=目標數(shù)據(jù)段描述符的DPL
    RPL<=目標數(shù)據(jù)段描述符的DPL

  • 最后,在任何時候,處理器要求棧段的特權級別必須和當前特權級CPL相同。

詳細的內(nèi)容還是要參考原書籍,這里只是做一個簡單的總結。

學習探討加個人:
qq:1126137994
微信:liu1126137994

總結

以上是生活随笔為你收集整理的【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产又粗又猛又爽又黄的视频一 | 初音未来打屁股 | 一区二区免费播放 | 又黄又免费的网站 | 亚洲黄色免费观看 | 天天搞天天干 | 亚洲女人视频 | 中文字幕无码精品亚洲资源网久久 | 国产精品v日韩精品v在线观看 | 国产精品国产三级国产专区51区 | 色综合社区 | 国产91欧美| 大陆一级黄色片 | 亚洲精品电影在线 | 白丝女仆被免费网站 | 涩涩综合 | 久久成人免费网站 | 国产白嫩美女无套久久 | 国产高清一区二区三区 | 国产精品美女久久久久久久久 | 亚洲乱码国产乱码精品 | 欧美日韩一区二区视频在线观看 | 国产在线视频91 | 亚洲欧美日韩国产精品 | 九草视频在线观看 | 欧美另类综合 | 一区二区视频免费观看 | 少妇被躁爽到高潮无码人狍大战 | 亚洲国产aaa | 最新国产精品自拍 | 超碰2020| 国产精品精品视频 | 亚洲综合图色40p | 亚洲激情午夜 | 男人的天堂在线视频 | 91精品国产电影 | 亚洲精品日韩综合观看成人91 | 亚洲一区二区蜜桃 | 国产精品三级久久久久久电影 | 草色网 | 看黄色一级大片 | 久久九九视频 | 色一情一区二区三区 | 国产乱淫av一区二区三区 | 亚洲av无码国产综合专区 | 成人久久一区二区 | 黄色a一级视频 | 中文在线字幕免费观 | 午夜精品亚洲 | 在线观看视频中文字幕 | 色呦呦网站 | 香蕉视频91| 日本羞羞网站 | 91精品国产99久久久久久红楼 | 国产精品久久久久久久专区 | 日韩视频免费 | 午夜视频福利 | 岛国二区三区 | 嫩草影院在线视频 | 欧美日韩大片在线观看 | 国产一区二区网站 | 小视频在线观看 | 成人免费在线网址 | 国产a一级| 日本韩国欧美在线 | 婷婷在线观看视频 | 欧美有码在线观看 | 亚洲高清在线免费观看 | 亚洲 小说区 图片区 | 成人免费播放视频 | 性一交一乱一伧老太 | 麻豆婷婷 | 日韩素人| 日本人妻熟妇久久久久久 | 百合sm惩罚室羞辱调教 | 久久精品国产77777蜜臀 | 国产午夜精品一区二区三区四区 | 美女午夜激情 | 老牛影视av牛牛影视av | 佐佐木明希av在线 | 日韩美女视频在线 | 欧美一级一级一级 | 亚洲精品高清无码视频 | 变态另类一区 | 香蕉污视频在线观看 | 日韩国产精品一区二区三区 | 香蕉视频网址 | 欧美a一级| 欧美专区在线 | 99热播精品| 在线视频亚洲欧美 | 日韩夜夜操 | 国产黄色片在线观看 | 欧美做爰全过程免费观看 | 欧美色婷婷 | 亚洲欧美日韩在线 | 欧美亚洲精品在线 | 黄色在线观看www | 97香蕉碰碰人妻国产欧美 |