-
-
[旧帖]
[原创] 分段分页学习笔记
0.00雪花
-
发表于:
2011-10-22 18:38
3349
-
[旧帖] [原创] 分段分页学习笔记
0.00雪花
说明:所参考的图表在附件Intel手册中
环境Vmware XP(sp3) wingdb
一、未开启PAE
boot.ini
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - debug " /execute /fastdetect /debug /debugport=com1 /baudrate=115200
kd> r cr0
cr0=8001003b
PG = 1(31)位 启用分页机制
PE = 1(0)位 启用必面必在保护模式
kd> r cr4
cr4=000006d9
PSE(页尺寸扩展标志) 第4位 = 1
PAE(物理地址扩展标志) 第5位 = 0
步骤:
1. cr0 PG(31) = 1 启用分页机制
2. cr4 PSE(4) = 1
cr4 PAE(5) = 0 => 物理地址大小32位
3. 页目录表PDE的PS标志(7) = ?
001B:0041DB40处
CD 03 90 6A FF 68 90 DC 5B 00 68 B8 2B 42 00 64 A1 00 00 00 00 50 64 89 25
00 00 00 00 83 C4 A4
kd> dg cs
P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
---- -------- -------- ---------- - -- -- -- -- --------
001B 00000000 ffffffff Code RE 3 Bg Pg P Nl 00000cfa
分段机制->线性地址:0041DB40
《intel手册》表3-3可知
由于 PAE = 0 -> 32位物理地址大小
PS = 0 时 4KB页 采用手册图3-12分解
PS = 1 时 4MB页 采用手册图3-13分解
由 图3-12 或3-13可得PDE 从而由图3-14(4kb页32位物理地址)或 图3-15
(4M页32位物理地址) 得到PS标志位
kd> r cr3
cr3=0d8ee000
kd> !dd 0d8ee000
# d8ee000 0da74067 10973067 10659067 00000000
# d8ee010 00000000 00000000 00000000 00000000
# d8ee020 00000000 00000000 00000000 00000000
PDBR(cr3) = 0d8ee000 PS = 0
所以为4KB页,32位物理地址
因此根据图3-12可进行分解线性地址
directory Table offset
0041DB40 0000 0000 01 00 0001 1101 B40
1 1D B40
PDE[1] = 10973067
属性位 0000 0110 0111
P(0) = 1 在物理内存中
R/W(1) = 1 该组页可写(但结合段描述符,仍然只读?)
U/S(2) = 1 User 用户特权
PWT(page write throught页级直写标记3) = 0
PCD(page cached页级高速缓存禁用标志4) = 0
(6) = 1 为0??
A(5) = 1
PS(7) = 0 (该表项指向页表4KB?)
G(8) = 0 忽略
AVL(9 10 11)
kd> !dd 10973000+0x1D*4
#10973074 1ea19025 00000000 00000000 00000000
PTE[0x1D] = 1ea19025
属性位 0000 0010 0101
P(0) = 1 在物理内存中
R/W(1) = 0 该组页只读
U/S(2) = 1 User 用户特权
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!