ring0
ring0
Intel的x86處理器是通過Ring級別來進行訪問控制的,級別共分4層,RING0,RING1,RING2,RING3。Windows只使用其中的兩個級別RING0和RING3。RING0層擁有最高的許可權,RING3層擁有最低的許可權。按照Intel原有的構想,應用程序工作在RING3層,只能訪問RING3層的數據,操作系統工作在RING0層,可以訪問所有層的數據,而其他驅動程序位於RING1、RING2層,每一層只能訪問本層以及許可權更低層的數據。如果普通應用程序企圖執行RING0指令,則Windows會顯示“非法指令”錯誤信息。
RING0隻給操作系統用,RING3誰都能用。如果普通應用程序企圖執行RING0指令,則Windows會顯示“非法指令”錯誤信息。儘管有CPU的特權級別作保護,遺憾的是WINDOW98本身漏洞很多,使用Windows 98的系統一天死機n回也是正常的。
誠然,RING設計的初衷是將系統許可權與程序分離出來,使之能夠讓OS更好的管理當前系統資源,也使得系統更加穩定。舉個RING許可權的最簡單的例子:一個停止響應的應用程序,它運行在比RING0更低的指令環上,你不必大費周章的想著如何使系統恢復運作,這期間,只需要啟動任務管理器便能輕鬆終止它,因為它運行在比程式更低的RING0指令環中,擁有更高的許可權,可以直接影響到RING0以上運行的程序,當然有利就有弊,RING保證了系統穩定運行的同時,也產生了一些十分麻煩的問題。比如一些OS虛擬化技術,在處理RING指令環時便遇到了麻煩,系統是運行在RING0指令環上的,但是虛擬的OS畢竟也是一個系統,也需要與系統相匹配的許可權。而RING0不允許出現多個OS同時運行在上面,最早的解決辦法便是使用虛擬機,把OS當成一個程序來運行。後來才有了更新的技術解決了此問題。