目錄保護模式,主要學習的就是段 與 頁 的關係. 學習段的時候先學習段暫存器
所以先從段開始學.
先看一段彙編 **如下
上面的**學過 teb peb 結構的人應該知道.是在做什麼. 而我麼你這裡所說不講 peb tebmov eax,fs:[0]
mov eax,fs:[eax + 0x30]
看彙編**.我們操作了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
inter手冊對段暫存器的操作暫存器指令有以下讀取
mov ax,ss 段暫存器的可見部分只有16位.所以讀出來之後只能放到16位暫存器中
寫入mov ss,ax 讀暫存器只是讀了可見部分的16位.而寫入暫存器則是寫入了96位
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. 看如下**.
看彙編我們可以看到. 為啥訪問 gs:[0]不會出錯那. 有基礎的都應該知道. 0位址是不可讀的. 其實我們說過. 我們對任何乙個位址的操作,操作的都是它的 段.base + 偏移的方式. 在實模式下.這個概念應該知道.到了保護模式下. 段base為0了. 所以偏移就是我們看到的虛擬位址.int main()
}
上面的彙編是一樣的. fs是有基位址的. 當其賦值給gs的時候. gs代表的就是fs. 所以用 gs去操作[0]位址是有效的. 等價於操作 fs:[0]
而fs:[0] 就是我們的teb結構.
2.4.4 段長探測
在段位址探測中,我們學習到了 訪問有效位址 都等價於段.base + 偏移位址x86下.偏移位址就是我們所看到的虛擬位址. 也稱為邏輯位址.
那麼我們如何探測 段長? 根據段暫存器**得知. fs的 limit 只有0xfff大小. 我們可以寫彙編**驗證一下
可能是我們win764上測試的. 讀取長度.越界讀取.都會導致程式崩潰.int main()
}
保護模式驗證段暫存器的屬性
保護模式第一篇段暫存器,學習過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 用於支援通過軟體...