101012 分页
Wirte by 021. Leave a message if i messed up ! : )
线性地址
mov eax , dword ds:[0x00000124]
- 其中0x00000124是有效地址
- ds.base(段寄存器) + 0x0000124 是线性地址。
101012 地址拆分
- **32位地址示例 0x00000124 **
1 | 0x00000124 = |
CR3物理地址寄存器
- CR3寄存器存储了物理地址
CR3指向了一个4KB页
第一级分页(页目录表PDT)(4kb)(第一个10)
存储的地址,
第一级分页存储了1024个第二级分页的地址
1
2
3
4
5
6
7
8
第一级分页数据结构:
每个PDE地址数据宽度:4个字节;
4096/4 = 1024;- 0地址不能读写是因为没有挂物理页,挂了之后可以读写
第二级分页(页表PTT)(第二个10)
- 数据为:PTE
- 多个PTE可以指向同一个物理页
- 一个PTE只能指向一个物理页,不能指向多个物理页
- 一个可以不指向物理页
第三级分页(物理页)(第三个12)
一个物理页的大小是4kb=4096=2的12次方,也就是需要12个bit位才能表示4kb中所有的地址.
指向物理页地址
物理地址
- CPU 将线性地址转换的物理地址
R/W可读可写位
P数据有效位
U/S 权限位,0 - 特权用户,1 - 普通用户
**PS位对PDE有用,PageSize的意思,当ps=1的时候是大页,低22位直接指向物理页. **
A位,是否访问位
D位,duty, 是否被写过,0 - 没有写过,1 - 写过
页目录基址(0xc03000000)
PDT页目录表的基址
访问进程内存公式
- 10-10-12 ; PDI(页目录项) : 10 , PTI(页表项) : 10 , 12 物理页
- 访问页目录的公式
- 0xc0300000 + PDI*4
- 访问页表的公式
- 0xc0000000 + PDI * 4096 + PTI * 4
2 - 9 - 9 - 12 分页(PAE 物理地址拓展分页)
- 2 : PDPTE 页目录指针表(page directory point table entry)
- 数据宽度2个bit, 最多拥有4个元素
- **9 : PDE **
- 9 : PTE
- 12 : 物理页
- 当x=1时,此数据为不可执行数据.