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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows保护模式学习笔记(一)—— 段寄存器GDT表

發(fā)布時間:2025/3/21 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows保护模式学习笔记(一)—— 段寄存器GDT表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Windows保護(hù)模式學(xué)習(xí)筆記(一)—— 段寄存器&GDT表

    • 保護(hù)模式
    • 參考書籍:
    • 一、段寄存器
      • 段寄存器的結(jié)構(gòu)
      • 段寄存器的讀寫
      • 段寄存器的屬性
        • 1)探測Attribute:
        • 2)探測Base:
        • 3)探測Limit:
    • 二、GDT表與LDT表
      • GDT表
        • 1)段描述符
          • 段描述符的屬性
          • 段描述符與段寄存器結(jié)構(gòu)的對應(yīng)關(guān)系
        • 2)段選擇子
      • 加載段描述符到段寄存器
      • 段權(quán)限檢查
        • 1) CPU分級概念
        • 2) 進(jìn)程特權(quán)級別
          • 當(dāng)前特權(quán)級(CPL)
          • 請求特權(quán)級(RPL)
        • 3)數(shù)據(jù)段的權(quán)限檢查

保護(hù)模式

X86 CPU的三個模式:實(shí)模式、保護(hù)模式和虛擬8086模式。

參考書籍:

《Intel白皮書第三卷》

一、段寄存器

什么是段寄存器?

當(dāng)我們用匯編讀寫某一個地址時:

mov dword ptr ds:[0x123456], eax

我們真正讀寫的地址是:

ds.base + 0x123456

段寄存器有幾個,有哪些?

有八個,分別是:

ES CS SS DS FS GS LDTR TR

段寄存器的結(jié)構(gòu)

結(jié)構(gòu)圖表示:


結(jié)構(gòu)體表示:

struct SegMent {WORD Selector; // 段選擇子 16位 可見WORD Atrributes; // 段屬性 16位 不可見DWORD Base // 段起始地址 32位 不可見DWORD Limit // 段大小 32位 不可見 }

段寄存器的讀寫

讀:MOV AX,ES
寫:MOV DS,AX
注意:段寄存器在的時候只讀16位,但的時候會寫入96位!
思考:如何證明向段寄存器寫入時寫了96位?

段寄存器的屬性

屬性圖:

圖中紅色字體部分在不同環(huán)境中可能不同

1)探測Attribute:

在編輯器中嘗試編譯并執(zhí)行以下代碼:

int var = 0; __asm {mov ax,ss // 此處不能為CS CS可讀 可執(zhí)行 但不可寫mov ds,axmov dword ptr ds:[var],eax }

編譯器能成功編譯上述代碼,并且程序運(yùn)行過程中沒有報(bào)錯


再在編輯器中嘗試編譯并執(zhí)行以下代碼:

int var = 0; __asm {mov ax,cs // SS 改成了 CSmov ds,axmov dword ptr ds:[var],eax }

編譯器能成功編譯上述代碼,但程序運(yùn)行過程中報(bào)錯

上面的兩個例子說明段寄存器的Attribute在寫入時會被更改!

2)探測Base:

在編輯器中嘗試編譯并執(zhí)行以下代碼:

int var = 1; __asm { mov ax,fs mov gs,ax mov eax,gs:[0] // 不要使用DS 否則編譯不過去mov dword ptr ds:[var],eax // = mov edx,dword ptr ds:[0x7FFDF000] }

編譯器能成功編譯上述代碼,并且程序運(yùn)行過程中沒有報(bào)錯

說明段寄存器的Base在寫入時會被更改!

3)探測Limit:

int var = 1; __asm { mov ax,fs mov gs,ax mov eax,gs:[0x1000]// 訪問的地址相當(dāng)于下面這行注釋的代碼 但DS的Limit是0xFFFFFFFF// mov eax,dword ptr ds:[0x7FFDF000+0x1000]mov dword ptr ds:[var],eax }

編譯器能成功編譯上述代碼,但程序運(yùn)行過程中報(bào)錯
這是因?yàn)?FS 段寄存器的 Limit 為 0xFFF,而我們輸入的段偏移為0x1000

思考:段寄存器在寫入時,只給了16位,剩下的80位填什么?數(shù)據(jù)從哪里來?

二、GDT表與LDT表

GDT:全局描述符表
LDT :局部描述符表

當(dāng)我們執(zhí)行類似MOV DS, AX指令時,CPU會查表,根據(jù)AX的值來決定查找GDT還是LDT,查找表的什么位置,以及查出多少數(shù)據(jù)

GDT表

工具:WinDbg

gdtr是一個寄存器,存儲了GDT表所在位置
gdtl也是一個寄存器,存儲了GDT表的大小

在內(nèi)存中查看GDT表

第一排的數(shù)據(jù)為內(nèi)存地址,紅框中的數(shù)據(jù)才是真正的內(nèi)存數(shù)據(jù),即GDT表
我們已經(jīng)知道如何查看GDT表了,但是如果想要看懂這張表,得先學(xué)習(xí)段描述符段選擇子

1)段描述符

描述:GDT表中存儲的元素稱為段描述符
大小:每個段描述符占用空間為8個字節(jié)

為了更方便觀察,在WinDbg中使用dq命令查看GDT表:

段描述符結(jié)構(gòu)圖:

段描述符高位在前,低位在后
例如GDT表的第二項(xiàng):00cf9b00`0000ffff
00cf9b00對應(yīng)結(jié)構(gòu)圖的高四字節(jié)(上面一行),0000ffff對應(yīng)結(jié)構(gòu)圖的低四字節(jié)(下面一行)

段描述符的屬性

P位
P = 1:段描述符有效
P = 0:段描述符無效

段描述符加載時,首先看P位是否為1

G位
G=0:段寄存器的Limit元素單位為字節(jié),最大值為0x000FFFFF
G=1:段寄存器的Limit元素單位為4KB,最大值為0xFFFFFFFF

S位
S = 1:段描述符為代碼段數(shù)據(jù)段描述符
S = 0:段描述符為系統(tǒng)段描述符

Type域
當(dāng)S = 1時,即段描述符為代碼段或數(shù)組段描述符時,Type域結(jié)構(gòu)圖如下:

第11位為0:段描述符為數(shù)據(jù)段描述符
第11位為1:段描述符為代碼段描述符
A位:若該代碼段/數(shù)據(jù)段未被訪問過,則值為0,否則為1
W位:若為1,表示該段可寫
E位:若為0,則向上拓展,若為1,則向下拓展
圖例:

向上拓展:有效范圍為fs.Base ~ fs.Base+Limit
向下拓展:有效范圍除了fs.Base ~ fs.Base+Limit

R位:若為1,表示該段可讀
C位:一致位。若為1,則是一致代碼段;若為0,則是非一致代碼段


當(dāng)S = 0時,即段描述符為系統(tǒng)段描述符時,Type域結(jié)構(gòu)圖如下:

D\B位
情況1:對CS段的影響

D=1:采用32位尋址方式
D=0:采用16位尋址方式

情況2:對SS段的影響

D=1:隱式堆棧訪問指令(如:PUSH POP CALL)使用32位堆棧指針寄存器ESP
D=0:隱式堆棧訪問指令(如:PUSH POP CALL)使用16位堆棧指針寄存器SP

情況3:向下拓展的數(shù)據(jù)段

D=1:段上限為4GB
D=0:段上限為64KB


DPL
描述:

DPL存儲在段描述符中,規(guī)定了訪問所在段描述符所需要的特權(quán)級別是多少
DPL數(shù)值越大,訪問所在段描述符所需要的權(quán)限越低
注意:在Windows中,DPL只會出現(xiàn)兩種情況,要么全為0,要么全為1

例:
若AX指向的段描述符的DPL=0,但當(dāng)前程序的CPL=3,那么這條指令是不會成功的!

段描述符與段寄存器結(jié)構(gòu)的對應(yīng)關(guān)系

Attribute:位于段描述符高四字節(jié)的第8-23位
Base:由三部分組成
第一部分:位于段描述符高四字節(jié)的第24-31位
第二部分:位于段描述符高四字節(jié)的第0-7位
第三部分:位于段描述符低四字節(jié)的第16-31位
Limit:由兩部分組成
第一部分:位于段描述符高四字節(jié)的第16-19位
第二部分:位于段描述符低四字節(jié)的第0-15位

2)段選擇子

描述:

段選擇子是一個16位的段描述符,該描述符指向了定義該段的段描述符

段選擇子結(jié)構(gòu)圖:

字段說明
RPL:請求特權(quán)級別
TI:TI=0 查GDT表;TI=1 查LDT表
Index:處理器將索引值乘以8在加上GDT或者LDT的基地址,就是要加載的段描述符

加載段描述符到段寄存器

除了MOV指令,還可以使用LES、LSS、LDS、LFS、LGS指令修改段寄存器
注意:不存在LCS指令,因?yàn)镃S不可寫

例:

char buffer[6]; __asm { les ecx,fword ptr ds:[buffer] //高2個字節(jié)給es,低四個字節(jié)給ecx }

實(shí)驗(yàn):為buffer賦值,并成功執(zhí)行以上代碼
注意:RPL<=DPL(在數(shù)值上)

段權(quán)限檢查

1) CPU分級概念

平時我們稱應(yīng)用程序?yàn)?環(huán),系統(tǒng)程序?yàn)?環(huán),前面這句話只與CPU有關(guān),與操作系統(tǒng)無關(guān)

思考:如何判斷某個程序處于哪一環(huán)?

2) 進(jìn)程特權(quán)級別

當(dāng)前特權(quán)級(CPL)

描述:

段寄存器 CS 的后兩位比特位稱為當(dāng)前特權(quán)級
注意:段選擇子SS和CS的后兩位比特位相同

如:
→ CS = 0x001B
→ 0x001B = 二進(jìn)制:0000 0000 0001 1011
→ 二進(jìn)制:11 = 十進(jìn)制:3
→ 因此:當(dāng)前進(jìn)程處于3環(huán)

請求特權(quán)級(RPL)

描述:

RPL是段選擇子結(jié)構(gòu)中的一部分
RPL是針對段選擇子而言的,每個段的選擇子都有自己的RPL
RPL表示用什么權(quán)限去訪問一個段

例:

MOV AX,0008 MOV DS,AX 與 MOV AX,000B MOV DS,AX 指向的是同一個段描述符,但RPL不同

3)數(shù)據(jù)段的權(quán)限檢查

檢查:CPL<= DPL并且 RPL<= DPL(數(shù)值上的比較)

例:

當(dāng)CPL = 0時執(zhí)行以下指令:MOV AX,000B // RPL=3,請求權(quán)限為3MOV DS,AX // 假設(shè)ax指向的段描述符的DPL=0 上述指令雖然滿足了CPL<=DPL,但RPL>DPL,因此執(zhí)行失敗

注意:代碼段和系統(tǒng)端描述符的檢查方式不一樣

思考:既然已經(jīng)有CPL(當(dāng)前特權(quán)級別)了,為什么還要有RPL(請求特權(quán)級別)
回答:我們本可以用“讀寫”的權(quán)限去打開一個文件,但為了避免出錯,有些時候我們使用“只讀”的權(quán)限去打開

總結(jié)

以上是生活随笔為你收集整理的Windows保护模式学习笔记(一)—— 段寄存器GDT表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 丰满av| 丝袜老师扒开让我了一夜漫画 | 亚洲品质自拍视频 | 红桃视频黄色 | 先锋影音av资源在线观看 | 在线观看小视频 | 国产精品综合一区二区 | 精品夜夜澡人妻无码av | 91精品国产91久久久久久吃药 | 亲嘴扒胸摸屁股激烈网站 | 亚洲性综合 | 欧美成人69 | 丝袜脚交国产在线观看 | 日韩av中文字幕在线播放 | 91极品身材尤物theporn | 天天摸夜夜操 | 亚洲私拍 | 中国一级特黄真人毛片免费观看 | 精品国产乱码久久久久久牛牛 | 美女极度色诱图片www视频 | 四虎影视永久地址 | 久久日韩| 秋霞一级视频 | 女女同性被吸乳羞羞 | 日韩免费看| 欧美日本在线观看 | 亚洲免费视频一区二区三区 | 国产福利精品在线 | 伊人网综合网 | 久草新在线| 亲嘴扒胸摸屁股激烈网站 | 真实乱偷全部视频 | 青春草在线视频观看 | 成年人免费在线观看网站 | 日本亚洲网站 | 污av| 在线成人免费电影 | 天堂网成人 | 久久久久久久久91 | 成人三级图片 | 二区欧美 | 一区二区中文在线 | 天堂av8| freesex性hd公交车上 | 日韩久久久久久久久久 | 成年人视频网站 | 日日摸日日操 | 国产精品无码网站 | xxxxx在线观看 | 婷婷91| 姐姐你真棒插曲快来救救我电影 | 肉大榛一进一出免费视频 | 草草影院最新网址 | 第九色 | 国产日韩在线观看一区 | sese久久| 在线碰| 日韩高清不卡在线 | 熟妇人妻精品一区二区三区视频 | 涩涩视频网站 | 裸体女人a级一片 | 国产欧美在线精品日韩 | 激情高潮呻吟抽搐喷水 | 在线观看亚洲av每日更新 | 国产福利短视频 | 亚洲精品影院在线 | 亚洲一卡二卡三卡 | 99re在线视频 | 亚洲欧美日韩国产精品 | 久久婷婷国产麻豆91天堂 | 特级西西444www| 91丨porny丨成人蝌蚪 | 800av凹凸 | 日韩成人高清在线 | 99久久婷婷国产综合精品青牛牛 | 毛片在线网站 | 肉番在线观看 | 美日韩三级 | 亚洲性片 | 久久精品国产精品亚洲色婷婷 | 国产精品久久久久久免费观看 | 日韩中文一区二区三区 | 久久精品视频中文字幕 | 在线观看黄色动漫 | 亚洲图片一区二区三区 | 日本孰妇毛茸茸xxxx | 成人h动漫在线 | 中日韩在线观看视频 | 深夜福利免费在线观看 | re久久| 久久精品亚洲天堂 | 国产午夜啪啪 | 中文字幕人妻一区 | 久久深夜视频 | 涩涩屋污 | 亚洲天堂免费看 | 亚洲国产日韩欧美在线观看 | 伊人免费在线观看 | 欧美另类高清videos的特点 |