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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.代码跨段跳转

發布時間:2025/3/20 编程问答 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.代码跨段跳转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼的跨段就是修改CS段寄存器

段寄存器:
ES,CS,SS,DS,FS,GS,LDTR,TR

段寄存器讀寫:
除CS外,其他的段寄存器都可以通過 MOV,LES,LSS,LDS,LFS,LGS指令進行修改

CS的改變意味著EIP的改變,改變CS的同時必須修改EIP,所以我們無法使用上面的指令來進行修改.

同時修改CS與EIP的指令.JMP FAR /CALL FAR /RETF /INT/IRETED

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

JMP FAR
代碼間的跳轉(段間跳轉非調用門之類的)執行流程
JMP 0x20:0x004183D7 CPU如何執行這行代碼?
段選擇子拆分0x20對應二進制形式0000 0000 0010 0000

RPL=00 //0環TI=0 //0 查gdt表Index = 4 //gdt首地址+4*8找到對應的段描述符

段描述符必須為代碼段,數據段是不能執行的。通過索引找到的描述符有4種情況是允許的:代碼段,調用門,TSS任務段,任務門

權限檢查:
如果為非一致代碼段,要求:CPL==DPL && RPL<=DPL
如果為一致代碼段,要求:CPL>=DPL

  • 系統提供了一些代碼,這段代碼不會破壞系統,直接提供給應用層使用的就可以用一致代碼段修飾
  • 如果不希望應用層直接訪問的代碼就用非一致代碼段修飾
  • 加載段描述符:
    通過上面的權限檢查后,CPU會將段描述符加載到CS段寄存器中

    代碼執行
    CPU將CS.Base+Offset(就是0x20后面的)的值寫入EIP然后執行CS:EIP處的代碼,段間跳轉結束

    1、段選擇子拆分
    2、查表得到段描述符
    3、權限檢查
    4、加載段描述符
    5、代碼執行

    3.段描述符屬性。有看代碼段或數據段,一致代碼段,非一致代碼段的技巧
    ------------------------------------------------------------

    對于一致代碼段:也就是共享的段

  • 特權級高的程序不允許訪問特權級低的數據:核心態不允許訪問用戶態的數據
  • 特權級低的程序可以訪問到特權級高的數據,但特權級不會改變:用戶態還是用戶態
  • 對于普通代碼段:也就是非一致代碼段

  • 只允許同級訪問
  • 絕對禁止不同級別的訪問:核心態不是用戶態,用戶態也不是核心態,
  • 總結
    1、為了對數據進行保護,普通代碼段是禁止不同級別進行訪問的。
    用戶態的代碼不能訪問內核的數據,同樣,內核態的代碼也不能訪問用戶態的數據.
    2、如果想提供一些通用的功能,而且這些功能并不會破壞內核數據,那么可以選擇一致代碼段,這樣低級別的程序可以在不提升CPL權限等級的情況下即可以訪問.
    3、如果想訪問普通代碼段,只有通過調用門等提示CPL權限,才能訪問。

    總結

    以上是生活随笔為你收集整理的4.代码跨段跳转的全部內容,希望文章能夠幫你解決所遇到的問題。

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