3.保護模式7-特權級轉移(通過呼叫門轉移目標段-有特權級轉換-進入ring3-b)
我們在進入ring3後,實現了高特權級到低特權級的轉移,我們在原有程式碼上稍作修改,實現低特權級到高特權級的轉移:
修改的程式碼如下:
1.修改呼叫門描述符和選擇的特權級
; 門 目標選擇子,偏移,DCount, 屬性
LABEL_CALL_GATE_TEST: Gate SelectorCodeDest, 0, 0, DA_386CGate+DA_DPL3;設定CPL為3
SelectorCallGateTest equ LABEL_CALL_GATE_TEST - LABEL_GDT + SA_RPL3;設定RPL為3
滿足CPL和RPL都小於等於呼叫門的DPL
2.在RING3程式碼段使用呼叫門呼叫RING0下的程式碼.
; CodeRing3
[SECTION .ring3]
ALIGN 32
[BITS 32]
LABEL_CODE_RING3:
mov ax, SelectorVideo
mov gs, ax
mov edi, (80 * 14 + 0) * 2
mov ah, 0Ch
mov al, '3'
mov [gs:edi], axcall SelectorCallGateTest:0 ;使用呼叫門從ring3進入ring0
jmp $
SegCodeRing3Len equ $ - LABEL_CODE_RING3
; END of [SECTION .ring3]
此程式碼編譯後是無法執行的,因為從低特權級到高特權級的轉移時需要用到TSS的