特權級,可以分為三種;第
一、描述符中的特權級dpl,表示這個段的特權;第
二、選擇子的rpl表示請求方的特權級;第
三、當前特權級,表示正在執行的**段所具有的特權;下面有關特權級知識的總結:
第一、對於資料段來說,特權級dpl表示了可以訪問該資料的最低特權。若資料段的dpl為1,那麼只有特權級為0或1的程式才能訪問他;
第二、特權指令,為了安全和效率有些指令是只能有特權級為0的**執行的,比如:lgdt指令;
第三、若高特權級**段定義為非依從(即:**段描述符中type中第三位c位依從位為0),那麼處理器只能在同特權級下的**間轉移;cpl = dpl,rpl = dpl;
第四、若高特權級**段定義為依從(即:**段描述符中type中第三位c位依從位為1),那麼可以從低特權級程式中轉移到高特權級程式中(即:cpl數值 >= 目標**段描述符中的dpl)。比如,當乙個依從**段特權級為2,那麼只有特權級為2,3的程式才能轉移到給依從**中去執行。所謂依從是指當乙個特權級為3的程式呼叫乙個特權級為0的程式時,當前特權級cpl不改變,cs中的cpl欄位不改變。也即是被呼叫程式依從於呼叫程式,就是說被呼叫程式特權依附呼叫程式特權,所以當前特權級cpl不改變。看到這裡會發現**段和資料段有點不一樣,資料段是要求特權級比自己高的程式才能訪問,**段則是要求比自己低的程式才能呼叫它,雖然有點不一樣,但目的都是一樣的,都是為了安全考慮。因為特權級越高的越安全,處理器是一定不會把控制權交給比當前特權級低的程式去執行的。 cpl數值 >= dpl,rpl數值 >= dpl;
第五、門描述符,用於不同特權級**之間的轉移控制;呼叫門有兩種使用方法:jmp far 從低特權級**轉移到高特權級**(和是否依從沒關係),當前特權級不改變(其實類似於低特權級**轉移到高特權級依從**);call far 從低特權級**轉移到高特權級**(和是否依從沒關係),但是會改變當前特權級,當前特權級會提公升到目標特權級,也就是說會在高特權級上執行程式,除了返回外,不允許從特權級高的**段轉移到特權級低的**段(這是絕對禁止的);
在使用呼叫門call far中會存在乙個問題,那就是當特權級為3的程式使用呼叫門call far呼叫特權級為0的程式中去讀取特權為2的資料段資料時,因為特權級為3的程式是不能讀取特權級為2的資料段資料的,但這裡通過使用門呼叫,提公升了當前特權級,所以是允許的。但是為了防止惡意程式使用這個漏洞,所以有在選擇子中新增了乙個rpl請求特權級,這個rpl可以說才是真正想讀取資料的程式特權級,而特權級為0的例程只是乙個被人利用的工具而已。在例程中會用指令獲取到呼叫該例程的選擇子中的rpl(這裡是3),當每次引用乙個段時都會把開始獲取到的rpl新增在選擇子中(這裡當要引用資料段時,rpl位會用呼叫者的rpl,也即是3)。其實呼叫門中call far雖然提公升了**的特權級,但是在引用其他段時,還是要還原他的本來面目,也就是本來的特權級。當然這都是由作業系統設計者自己決定的。
第六、當把選擇子傳送到資料段暫存器時,要求:當前特權級高於或者等於資料段描述符的dpl,cpl數值 <= dpl數值;請求特權級也要高於或者等於資料段描述符的dpl,rpl數值 <= dpl數值;
第七、對於堆疊的特權,則更為特別點,要求rpl = dpl = cpl;比如,當特權級3的程式呼叫特權級0的程式,則要定義特權級0,特權級1,特權級2,特權級3,共四個堆疊段;
x86架構和arm構架
x86是英特爾公司開發的並且通治了幾十年.x86反應快在pc應用廣泛.86與arm最大不同在於指令集上.x86跟硬體發揮優勢.但是帶來的功耗大.arm構架指令簡單執行起來快功耗也低.現在智慧型手機和平板很火.平板電腦要求便攜和續航能力.arm構架具有低功耗.使之有了市場.那麼為什麼沒有得到普及原因主...
x86架構下的函式引數
這裡就拿x86 64架構下來舉例子,在這個架構下分別用rdi,rsi,rdx,rcx,r8,r9作為第1 6個引數。rax作為返回值 當我們去呼叫函式的時候 long test long a,long b,long c long sum long a,long b,long c,long d,lon...
平板電腦的ARM和X86架構
說到台式pc機的cpu,一般最關注的就是英特爾 amd等品牌,然後關注的就是雙核和主頻,很少提到cpu架構,因為台式pc機的cpu已經被英特爾x86壟斷。目前市面上的平板電腦主要採用兩種cpu架構 arm架構和x86架構。在蘋果平板電腦ipad系列之前,平板電腦多使用x86架構。x86原是台式電腦平...