(7)数据段权限检查
代碼段和系統(tǒng)段描述符的權(quán)限檢查方式并不一樣,詳見后續(xù)課程,本文只探討數(shù)據(jù)段。
一、數(shù)據(jù)段權(quán)限檢查
DPL是段的權(quán)限屬性,要想訪問(wèn)一個(gè)數(shù)據(jù)段,段選擇子和CPU當(dāng)前權(quán)限必須高于DPL。要注意,權(quán)限數(shù)值越低,權(quán)限越高,比如我們常說(shuō)的0環(huán),就是權(quán)限最高的。
RPL:段選擇子的權(quán)限
DPL:段的權(quán)限
CPL:CPU權(quán)限
綜上所述,數(shù)據(jù)段權(quán)限檢查遵循以下規(guī)則:
CPL <= DPL 并且 RPL <= DPL (數(shù)值上的比較)
只有滿足上述條件,才能成功訪問(wèn)數(shù)據(jù)段。
總結(jié):
CPL CPU當(dāng)前的權(quán)限級(jí)別
DPL 如果你想訪問(wèn)我,你應(yīng)該具備什么樣的權(quán)限
RPL 用什么權(quán)限去訪問(wèn)一個(gè)段
二、練習(xí)
<1> 在3環(huán)能加載的數(shù)據(jù)段有哪些?
3環(huán)CPL=3,只能加載DPL=3的數(shù)據(jù)段。
<2> 在0環(huán)能加載的數(shù)據(jù)段有哪些?
0環(huán)CPL=0,滿足RPL<=DPL的數(shù)據(jù)段都可以加載。
<3> 詳細(xì)描述這下面代碼的執(zhí)行過(guò)程:
mov ax,0x23
mov ds,ax
段選擇子是0x0023,RPL=11b=3,屬于最低權(quán)限,只能訪問(wèn)DPL=3的數(shù)據(jù)段。而CPL則無(wú)影響,不管是0環(huán)還是3環(huán),都滿足CPL<=RPL,只要RPL滿足,CPL也一定滿足。
當(dāng)執(zhí)行 mov ds,ax 時(shí),CPU先解析段選擇子0023,然后去GDT表找段描述符,檢查段描述符P位是否有效,然后檢查S位,確認(rèn)是數(shù)據(jù)段或代碼段,然后檢查TYPE域確認(rèn)是數(shù)據(jù)段,然后看DPL是否等于3.只要上述條件都滿足,則mov指令執(zhí)行成功,只要有一條不滿足,mov失敗。
總結(jié)
以上是生活随笔為你收集整理的(7)数据段权限检查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (6)段描述符D/B位
- 下一篇: (8)JMP FAR段间跳转