保護模式 2講 段 段暫存器結構

2022-03-20 19:12:59 字數 2484 閱讀 8066

目錄保護模式,主要學習的就是段 與 頁 的關係. 學習段的時候先學習段暫存器

所以先從段開始學.

先看一段彙編 **如下

mov eax,fs:[0]

mov eax,fs:[eax + 0x30]

上面的**學過 teb peb 結構的人應該知道.是在做什麼. 而我麼你這裡所說不講 peb teb

看彙編**.我們操作了fs; fs就是段暫存器 我們這裡操作的位址分別就是fs:[0]fs:[0x30]

而其實展開來說. 我們真正的操作的位址是fs.base+ 0 或者fs.base+ 0x30 這樣來操作的.

出了fs暫存器.還有es cs ss ds gs ldtr tr等段暫存器

我們上面所說的 段.base 其實是段暫存器的乙個成員. 可以理解為段暫存器就是乙個結構體

ps: 在inter手冊中也稱為段暫存器為段描述符

在我們x86平台下.我們知道乙個暫存器是4個位元組. 32位. 可以表達乙個32位的資料. 但是我們的段

卻很少有人關注 其實我們的段 是有96位的.是乙個結構體.

結構如下:

struct segment

使用彙編可以對段暫存器進行讀寫.

讀取

mov ax,ss 段暫存器的可見部分只有16位.所以讀出來之後只能放到16位暫存器中

寫入mov ss,ax 讀暫存器只是讀了可見部分的16位.而寫入暫存器則是寫入了96位

inter手冊對段暫存器的操作暫存器指令有以下

mov pop lds les lss lgs lfs  l是load的意思
在x86下.我們可以看如下暫存器表示圖.

暫存器名稱

段選擇子(select)

段屬性(attributes)

段基址(base)

段長(limit)

es(附加擴充套件段)

0x0023

可讀,可寫

0x0000000

0xffffffff

cs(**段)

0x001b

可讀,可執行

0x00000000

0xffffffff

ss(堆疊段)

0x0023

可讀,可寫

0x00000000

0xffffffff

ds(資料段)

0x0023

可讀,可寫

0x00000000

0xffffffff

fs(分段機制)

0x003b

可讀,可寫

0x7ffdf000

0xfff

gs未使用

未使用未使用

未使用我們可以巧妙的利用彙編.來探測一下段屬性是否存在的. 依靠段暫存器結構所知. 出了cs段不能寫之外.其餘段都是可以寫的.

那麼看一下內斂彙編**.

2.4.3 段基位址探測

根據上面我們可以輕而一舉的探測出cs段帶有不可寫的屬性. 那麼同樣我們可以探測一下基位址.

在上圖我們得知. 有基位址的只有fs. 看如下**.

int main()

}

看彙編我們可以看到. 為啥訪問 gs:[0]不會出錯那. 有基礎的都應該知道. 0位址是不可讀的. 其實我們說過. 我們對任何乙個位址的操作,操作的都是它的 段.base + 偏移的方式. 在實模式下.這個概念應該知道.到了保護模式下. 段base為0了. 所以偏移就是我們看到的虛擬位址.

上面的彙編是一樣的. fs是有基位址的. 當其賦值給gs的時候. gs代表的就是fs. 所以用 gs去操作[0]位址是有效的. 等價於操作 fs:[0]

而fs:[0] 就是我們的teb結構.

2.4.4 段長探測

在段位址探測中,我們學習到了 訪問有效位址 都等價於段.base + 偏移位址x86下.偏移位址就是我們所看到的虛擬位址. 也稱為邏輯位址.

那麼我們如何探測 段長? 根據段暫存器**得知. fs的 limit 只有0xfff大小. 我們可以寫彙編**驗證一下

int main()

}

可能是我們win764上測試的. 讀取長度.越界讀取.都會導致程式崩潰.

保護模式驗證段暫存器的屬性

保護模式第一篇段暫存器,學習過8086彙編的同學應該知道段暫存器在8086種的重要程度,8086cpu的暫存器都是16位,8086cpu能夠以16位的位址匯流排訪問到1mb的記憶體位址,採用的就是段位址 16 偏移位址 實體地址的方式,以16位位址匯流排訪問1mb的物理記憶體,8086時代訪問的位址...

保護模式1 段暫存器 基本屬性

段暫存器是什麼?segment register 也可以稱作 selector register 當我們用彙編讀寫某個位址時 mov dword ptr ds 0x00401000 eax 我們讀寫的位址其實是ds.base 0x00401000 0x00401000被稱為讀寫的有效位址 ds.ba...

ARM處理器工作模式及暫存器結構

一 arm七種處理器工作模式 使用者模式 usr 正常程式執行模式 快速中斷模式fiq 用於高速資料傳輸和通道處理 外部中斷模式irq 用於通常的中斷處理 管理模式svc 供作業系統使用的一種保護模式 swi 資料中止中斷模式abt 用於虛擬儲存及儲存保護 未定義指令中止模式und 用於支援通過軟體...