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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

(3)段描述符,段选择子,LES指令

發布時間:2025/3/21 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (3)段描述符,段选择子,LES指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、段描述符

GDT表里面存的東西叫段描述符,一個段描述符占8字節,結構如下
暫時不需要知道各個位的作用,先練習一下拆分,在windbg中輸入以下命令,打印GDT表。

這里我們打印了GDT表的前5個段描述符。以第2個為例,演示拆分。
00cf9b00 0000ffff
0000 0000 1100 1111 1001 1011 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111
Base 31:24: 00000000
G: 1
D/B: 1
0: 0
AVL: 0
Segment Limit 19:16: 1111
P: 1
DPL: 00
S: 1
Type: 1011
Base 23:16: 0000 0000
Base 15:00: 0x00000000
Segment Limit: 0xFFFFFFFF

二、段選擇子

段選擇子有16位,結構如下圖:

其中,0-1位是RPL(暫時不知道是啥);2位是TI位,0表示查GDT表(windows不使用LDT所以此位永遠是0),3-15位是GDT表的下標。

下面是段選擇子拆分實驗:
0x0023
0000000000100 0 11
Index: 0x4
TI: 0
RPL: 11

三、使用LES指令修改ES

// LES.cpp : Defines the entry point for the console application. //#include "stdafx.h"// RPL <= DPL // Selector: 0000 0000 0011 1000(0038) // LES高2字節給ES,低4字節給ECX,其他指令如LSS,LDS依此類推 // RPL是段選擇子的權限,DPL是段描述符的權限,數值越大權限越小 // 因此當RPL=3時,只能訪問DPL=3的段描述符;當RPL=0時,可以訪問所有段描述符 // 下面的buffer作為源操作數執行les指令,會把ES寫為0x0038,EAX寫為0x11223344 char buffer[6] = {0x44,0x33,0x22,0x11,0x38, 0x00};int main(int argc, char* argv[]) {// LES修改段寄存器__asm{les ecx,fword ptr ds:[buffer]}return 0; }


《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的(3)段描述符,段选择子,LES指令的全部內容,希望文章能夠幫你解決所遇到的問題。

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