日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows保护模式学习笔记(二)—— 代码跨段跳转

發布時間:2025/3/21 windows 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows保护模式学习笔记(二)—— 代码跨段跳转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows保護模式學習筆記(二)—— 代碼跨段跳轉

    • 要點回顧
    • 代碼跨段跳轉
      • 執行流程
        • 1)段選擇子拆分
        • 2)查表得到段描述符
        • 3)權限檢查
        • 4)加載段描述符
        • 5)代碼執行
        • 6)總結
          • 一致代碼段(共享的段)
          • 非一致代碼段(普通代碼段)
      • 實驗
        • 第一步:
        • 第二步:
        • 第三步:
        • 第四步:
        • 總結

要點回顧

段寄存器:
ES,CS,SS,DS,FS,GS,LDTR,TR
除CS外,其他的段寄存器都可以通過MOV,LES,LSS,LDS,LFS,LGS指令進行修改

思考:CS為什么不可以直接修改呢?
CS的改變意味著EIP的改變,改變CS的同時必須修改EIP,所以我們無法使用上面的指令來進行修改.


代碼跨段跳轉

段間跳轉分為兩種情況:

  • 要跳轉的段是一致代碼段
  • 要跳轉的段是非一致代碼段
  • 同時修改CS與EIP的指令:
    JMP FAR / CALL FAR / RETF / INT /IRETED

    只改變EIP的指令:
    JMP / CALL JCC / RET

    執行流程

    思考:CPU如何執行 JMP 0x20:0x004183D這行指令

    1)段選擇子拆分

    0x20 二進制:0000 0000 0010 0000 即

    RPL = 00 TI = 0 Index = 4

    2)查表得到段描述符

    TI=0:查GDT表
    Index=4:找到對應的段描述符
    四種情況可以跳轉:

  • 代碼段
  • 調用門
  • TSS任務段
  • 任務門
  • 3)權限檢查

    一致代碼段:要求 CPL >= DPL
    非一致代碼段:要求 CPL == DPL并且 RPL <= DPL

    4)加載段描述符

    通過上面的權限檢查后,CPU會將段描述符加載到CS段寄存器中

    5)代碼執行

    CPU 將 CS.Base + Offset的值寫入EIP,然后執行CS:EIP處的代碼

    段間跳轉到此結束

    6)總結

    一致代碼段(共享的段)
  • 特權級的程序不允許訪問特權級的數據:核心態不允許訪問用戶態的數據
  • 特權級的程序可以訪問到特權級的數據,但特權級不會改變:用戶態還是用戶態
  • 非一致代碼段(普通代碼段)
  • 只允許同級訪問
  • 絕對禁止不同級別的訪問:核心態不是用戶態,用戶態也不是核心態
  • 注意:直接對代碼段進行JMP 或者 CALL的操作,無論目標是一致代碼段還是非一致代碼段,CPL都不會發生改變.如果要提升CPL的權限,只能通過調用門

    實驗

    第一步:

    復制一個非一致代碼段描述符,寫入GDT表空白處

    第二步:

    在OD中執行 JMP FAR 命令

    執行前,CS = 001B

    執行后,CS = 004B

    執行成功!

    第三步:

    將段描述符的 DPL 置為 0,再在OD中執行JMP FAR命令


    執行后,程序進入了ntdll,也就是異常模塊,說明執行失敗

    失敗原因
    要跳轉的代碼段是一個非一致代碼段(DPL=0),而程序的CPL=3,權限檢查未通過
    非一致代碼段要求CPL=DPL時才允許跳轉

    這樣設計的目的是防止3環的程序跳轉到系統段執行

    第四步:

    將段描述符Type域C位改為1,令其成為一致代碼段

    再次執行JMP FAR命令


    執行成功!

    總結

    一、為了對數據進行保護,普通代碼段禁止用戶態的代碼/數據和內核態的代碼/數據相互訪問

    二、如果選擇一致代碼段,低級別的程序就可以在不提升CPL權限等級的情況下進行訪問,并且不會破壞內核態的數據

    三、如果想訪問普通代碼段,必須通過"調用門"等方式提升CPL權限

    總結

    以上是生活随笔為你收集整理的Windows保护模式学习笔记(二)—— 代码跨段跳转的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。