2015-06-26 72 views
2

我想了解一些關於intel x86體系結構的細節。我還沒有真正理解調用門機制,但沒有它, 訪問一個不符合規範的代碼段,它的DPL必須等於CPL。訪問代碼段時的權限級別檢查

我不明白,這是很重要的情況下,DPL < CPL的,但爲什麼在情況DPL> CPL它是被禁止的?我的意思是如果我們想保持相同的特權級別,跳轉後CPL可以保持不變,如果我們想降低特權,我們可以使用RPL。

回答

6

一般來說,當你訪問一個代碼段直接你只能做,對與同樣的特權段。
這就是不合格代碼段(NCCS)的用途。
英特爾取得了引入也順應可以通過弱勢應用程序進行訪問(如果內核需要而不升高調用者的特權分享一些代碼)代碼段(CCS)的青睞。

直接訪問代碼段永不改變當前權限,目標代碼的CPL是調用者的CPL。

的RPL也需要沒有任何作用。它被CCS忽略,並且必須小於或等於NCCS的呼叫者CPL(這可能是副作用)。

規則是:

NCCS
1.主叫CPL必須等於描述符DPL(同特權) 2.目標代碼將與CPL等於呼叫者CPL運行而不管該RPL在選擇器中使用。 3.選擇器RPL必須小於或等於主叫方CPL。

CCS
1.主叫CPL必須大於或等於描述符DPL(特權較少) 2.目標代碼將與CPL等於呼叫者CPL運行而不管RPL的在選擇使用。

正如你可以看到直接訪問代碼段不會改變CPL(並且沒有堆棧變化)。

要更改權限(CPL)英特爾推出呼叫蓋茨。通過CG,與數據段一樣,RPL可讓您模擬特權較低的程序。
如果CG作爲DPL = 2(和目標選擇器還具有DPL> = 2)和您的代碼具有CPL = 0時,可以選擇進行呼叫與CPL = 3(從而不獲得所述用戶模式應用程序訪問)或CPL = 2(獲取訪問權限但不可能調用其他更多特權代碼段)的內核組件。