先看實現代碼
mov ax, SelectorTSS ltr ax ; push SelectorStack3push TopOfStack3 push SelectorCodeRing3 push 0retf
每一個特權等級對應一個自己的堆棧,
RING0 –- ESP0,SS0
RING1 –- ESP0,SS1
RING2 –- ESP0,SS2
CPU進行不同特權級別的跳轉時,要改變堆棧!但是CPU只有一個SS和SP,要讓跳轉后能夠恢復,就必須將每一個特權等級的堆棧信息都保存在內存中。保存各個特權堆棧的內存有一個專門的結構TSS,該結構的首地址應該被保存到CPU的任務寄存器(Task Register)。
retf 相當于一下匯編pop ippop cspop sppop ss
執行完retf之后CPU的下一個執行的指令cs:ip 就成了 SelectorCodeRing3:0 實際上就表示執行RING3的代碼段的第一條指令
新聞熱點
疑難解答