日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91视频 - 88av| 欧美激情小视频 | 黄网站欧美内射 | 一区二区www| 懂色av一区二区三区在线播放 | 精品一区日韩 | 1024亚洲天堂 | 成人在线观看免费网站 | 小辣椒导航 | 伊人久久视频 | 深爱激情丁香 | 久久综合五月天 | 国产123| 色呦呦在线看 | 在线天堂1 | 久久综合免费视频 | 男人扒女人添高潮视频 | 97超碰人人 | 自偷自拍亚洲 | 精品无码国产污污污免费网站 | 国产三级播放 | 日韩第一页在线观看 | 巨胸喷奶水www久久久免费动漫 | 丰满少妇一区二区三区 | 亚洲自拍偷拍综合 | 国产视频在线观看一区 | 成人福利网址 | 91麻豆成人精品国产免费网站 | 国产天堂在线 | 国产成人在线电影 | 日韩专区在线 | 国产成人三级在线 | 少妇情理伦片丰满午夜在线观看 | 精品成人免费一区二区在线播放 | 亚洲精品久久久久久动漫器材一区 | 欧美三级一区 | 欧美男女视频 | 黄色三级生活片 | 亚洲一级大片 | 中文成人在线 | 日韩精品播放 | 中文字幕网站在线观看 | 国产免费一区二区三区免费视频 | 中文字幕欧美专区 | 欧洲精品一区二区三区久久 | 黄色网址中文字幕 | 天堂√8在线中文 | 青娱乐欧美| 香蕉久久久久久久av网站 | 国产主播在线看 | 日韩少妇高潮抽搐 | 午夜影音| 成年人黄色在线观看 | 亚洲一区二区三区免费在线观看 | 国产精品久久久久久久久动漫 | 欧美一级黄色片在线观看 | 97香蕉| 麻豆精品视频在线 | 综合精品一区 | 在线观看中文字幕码 | 91av在线免费观看 | 久久久久久久久国产精品 | jizzjizz在线播放 | 色先锋av | 成人在线视频播放 | 999精品在线观看 | 人妻熟女一区二区三区 | 午夜一区二区三区 | 少妇高潮一区二区三区 | 国产女人18水真多18精品一级做 | 午夜久久久久久噜噜噜噜 | 日韩一卡二卡三卡 | 日本少妇xxxxxx | 国产一毛片| 在线中文字幕一区 | wwwww国产 | 日韩在线视频看看 | 兔费看少妇性l交大片免费 日韩高清不卡 | 亚洲性事 | 成人精品动漫 | 四虎影视成人永久免费观看亚洲欧美 | 天天摸天天操天天爽 | 亚洲乱码国产乱码精品精98午夜 | 裸体女人a级一片 | 日韩在线中文 | 日韩精品少妇 | 女人下面流白浆的视频 | 国产成人精品av在线观 | 国产欧美一区二区三区另类精品 | 日韩大片在线 | 99re这里都是精品 | 欧美电影一区二区三区 | 污网站免费看 | 亚洲国产精品久久精品怡红院 | 日韩午夜在线观看 | 啪啪网站免费观看 | 大粗鳮巴久久久久久久久 | 自拍21区 | 中出中文字幕 |