2
我正在閱讀有關x86分段保護的blog post。 RPL可以和DPL不同嗎?如果有的話,這是什麼用途?RPL可以與x86機器上的DPL不同嗎?
我正在閱讀有關x86分段保護的blog post。 RPL可以和DPL不同嗎?如果有的話,這是什麼用途?RPL可以與x86機器上的DPL不同嗎?
他們可以是不同的,這是故意的。
的想法是,當OS /內核並代表用戶代碼的東西,它可以使用用戶代碼的權限(RPL
將反映,好了,Requestor Privilege Level
,用戶代碼的級別)訪問內存。如果它們不足,則異常操作失敗。如果這個(或者類似的)機制不存在,那麼用戶代碼可能會以某種方式破壞操作系統/內核,請求代表它執行操作,操作將由內核以其內核的特權執行。那就是你得到的地方EOP。
有關細分受衆羣的更多信息,請參閱源代碼,英特爾的CPU手冊。它在那裏。
請問您可以通過指定環0中的內核代碼和環3中的用戶代碼來指定CPL,RPL和DPL值來更具體地說明您的示例。 – Bruce
DPL是內核描述符中的任何內容正在訪問(例如可能是內核(通常爲0)或用戶(3))。內核的CPL是0(幾乎總是)。段選擇器中用於訪問段的RPL是請求者的級別。如果請求者是用戶,它是3.如果請求者是內核,它通常爲0. –
因此,在你的示例中,max(CPL,RPL)= 0,DPL可以是0或3.因此,內核可以訪問它的任何數據段想要。但是您說內核在代表另一個用戶執行代碼時使用RPL爲3,以避免意外更改某些其他用戶代碼中的某些內容。但是,如果我設置RPL = 3,那麼我就不能擁有屬於內核的數據段(它將具有DPL 0)。我很困惑 – Bruce