1. 程式人生 > >3.保護模式7-特權級轉移(通過呼叫門轉移目標段-有特權級轉換-進入ring3-b)

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], ax

    call    SelectorCallGateTest:0 ;使用呼叫門從ring3進入ring0

    jmp    $
SegCodeRing3Len    equ    $ - LABEL_CODE_RING3
; END of [SECTION .ring3]

此程式碼編譯後是無法執行的,因為從低特權級到高特權級的轉移時需要用到TSS的