日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

9 《Undocumented Windows 2000 Secrets》翻譯 --- 第四章

第四章 探索 Windows 2000 的內(nèi)存管理機制
翻譯: Kendiv( fcczj@263.net)
更新: Tuesday, February 22, 2005
聲明:轉(zhuǎn)載請注明出處,并保證文章的完整性,本人保留譯文的所有權利 。
Windows 2000 的分段和描述符
w2k_mem.exe 的另一個很棒的選項是e ,該選項將顯示和說明處理器的段寄存器和描述表的內(nèi)容 。示列 4-13 給出了其典型輸出 。CS 、 DS 和 ES 段寄存器的內(nèi)容非常清晰的證明了 Windows 2000 為每個進程提供了平坦的 4GB 地址空間:起始于 0x00000000 ,終止于 0xFFFFFFFF。示列 4-13 中最右邊的標志符用來表示段的類型,該段的類型由它的描述符的 Type 成員給出 。代碼和數(shù)據(jù)段的 Type 屬性可分別符號化為“ cra ”和“ ewa ” 。省略號“ - ”意味著相應的屬性沒有設置 。一個任務狀態(tài)段( Task State Segment , TSS )僅能有“ a ”(可用)和“ b ”(忙)兩種屬性 。表 4-5 給出了所有可用的屬性 。示列 4-13 展示了 Windows 2000 的 CS 段的不一致性, CS 段允許執(zhí)行和讀取,而 DS 、 ES 、 FS 和 SS 段的屬性則是可擴展和讀 / 寫訪問 。另一個不明顯但十分重要的細節(jié)是 CS 、 FS 和 SS 段的 DPL 在用戶模式和內(nèi)核模式并不相同 。DPL 是描述符特權級別( Descriptor Privilege Level ) 。對于代碼段( CS ),僅當調(diào)用者位于其 DPL 指定的特權級時才能調(diào)用該段中的代碼(參考 Intel 1999c, pp. 4-8f ) 。在用戶模式, CS 段的 DPL 為 3 ;在內(nèi)核模式,其 DPL 為 0。對于數(shù)據(jù)段( DS ),其 DPL 是最低的特權級,在用戶模式下,所有特權級都可訪問它,而在內(nèi)核模式下,僅允許特權 0 訪問 。
示列 4-13. 顯示 CPU 信息
IDT 和 GDT 寄存器的內(nèi)容顯示了 GDT 的范圍是: 0x8003F000 --- 0x8003F3FF ,緊隨其后的就是 IDT ,其地址范圍是: 0x8003F400 --- 0x8003FBFF。由于每個描述符占用 64 位,故 GDT 和 IDT 分別包含 128 和 256 個項 。注意, GDT 可容納 8,192 個項,但 Windows 2000 僅使用了其中的一小部分 。
表 4-5 代碼和數(shù)據(jù)段的 Type 屬性

屬 性
描 述
【9 《Undocumented Windows 2000 Secrets》翻譯 --- 第四章】CODE
c
使段一致(低特權的代碼可能進入)
CODE
r
允許讀訪問(和僅執(zhí)行訪問相斥)
CODE
a
段可以訪問
DATA
e
向下擴展段(堆棧段的典型屬性)
DATA
w
允許寫訪問(和僅讀取訪問相斥)
DATA
a
段可以訪問
TSS32
a
任務狀態(tài)段可用
TSS32
b
任務狀態(tài)段繁忙
W2k_mem.exe 還提供了兩個很有特色的選項 ---- g 和i ,這兩個選項可顯示 GDT 和 IDT 的更多細節(jié) 。示列 4-14 示范了g 選項的輸出 。它很類似于 示列 4-13 中的“ kernel-model segment: ”一節(jié),但列出了在內(nèi)核模式下所有可用的段選擇子( selector ),而不僅僅是存儲在段寄存器中的那些 。W2k_mem.exe 通過遍歷整個 GDT 來獲取所有的段選擇子,可通過 IOCTL 函數(shù) SPY_IO_SEGMENT 來指示 Spy 設備查詢段信息 。僅顯示有效的選擇子 。比較 示列 4-13 和 4-14 中的 GDT 選擇子將十分有趣, GDT 的選擇子定義于 ntddk.h 中,匯總在 表 4-6。顯然,它們與 w2k_mem.exe 的輸出是一致的 。
示列 4-14. 顯示 GDT 描述符
表 4-6. 定義于 ntddk.h 中的 GDT 選擇子( selector )
符 號

注 釋
KGDT_NULL
0x0000
空的段選擇子(無效)
KGDT_R0_CODE
0x0008
內(nèi)核模式的 CS 寄存器
KGDT_R0_DATA
0x0010
內(nèi)核模式的 SS 寄存器
KGDT_R3_CODE
0x0018
用戶模式的 CS 寄存器
KGDT_R3_DATA
0x0020
用戶模式的 DS 、 ES 和 SS 寄存器,內(nèi)核模式的 DS 和 ES 寄存器

推薦閱讀