101012

1. 10-10-12分页

1、物理地址

线性地址、有效地址、物理地址

如下指令:

MOV eax,dword ptr ds:[0x12345678]

其中,0x12345678 是有效地址

ds.Base + 0x12345678 是线性地址

2、物理在哪里?

每个进程都有一个CR3,(准确的说是都一个CR3的值,CR3本身是
个寄存器,一个核,只有一套寄存器)
CR3指向一个物理页,一共4096字节,如图:

这里写图片描述

3、设置分页模式
这里写图片描述
将noexecute 改成 execute

2、PDE/PTE

这里写图片描述

2、指向相同物理页

<1> PTE可以没有物理页,且只能对应一个物理页.

<2> 多个PTE也可以指向同一个物理页.

3、PDE/PTE属性

1、物理页的属性

物理页的属性 = PDE属性 & PTE属性
这里写图片描述

2、P位
这里写图片描述
线性地址0 为什么不能访问呢?

没有指定物理页,指定物理页就一定能访问吗?

先看PDE与PTE的P位 P=1 才是有效的物理页

3、R/W 位
这里写图片描述
R/W = 0 只读
R/W = 1 可读可写

实验:

定义一个只读类型的变量,再另一个线性地址指向相同的
物理页,通过修改PDE/PTE属性,实现可写。

4、U/S 位
这里写图片描述
U/S = 0 特权用户
U/S = 1 普通用户

实验:

   修改一个高2G线性地址的PDE/PTE属性,实现Ring3可读.

比如:0x8003F00C

5、P/S位
这里写图片描述
只对PDE有意义,PS == PageSize的意思 当PS==1的时候 PDE直接指向
物理页 无PTE,低22位是页内偏移。

线性地址只能拆成2段:大小为4MB 俗称“大页”

举例:

   分析8043F00C线性地址的PDE属性。

6、A 位
这里写图片描述
是否被访问(读或者写)过 访问过置1 即使只访问一个字节也会导致PDE PTE置1

7、D 位
这里写图片描述
脏位 是否被写过 0没有被写过 1被写过

8、关于PWT/PCD属性
这里写图片描述
PWT:Page Write Through

PWT =  1 时 写Cache的时候也要将数据写入内存中。

PCD:Page Cache Disable

PCD = 1时,禁止某个页写入缓存,直接写内存。

比如,做页表用的页,已经存储在TLB中了,可能不需要再缓存了。

3、页目录表基址

内容回顾
如果系统要保证某个线性地址是有效的,
那么必须为其填充正确的PDE与PTE,如果我们想填充PDE与PTE那么必须能够访问
PDT与PTT,那么存在2个问题:

1、一定已经有“人”为我们访问PDT与PTT挂好了PDE与PTE,我们只有找到这个线性
地址就可以了。

2、这个为我们挂好PDE与PTE的“人”是谁?

注意:
CR3中存储的是物理地址,不能在程序中直接读取的。如果想读取,也要把Cr3
的值挂到PDT和PTT中才能访问,那么怎么通过线性地址访问PDT和PTT呢?

1、拆分C0300000

结论:C0300000存储的值就是PDT

如果我们要访问第N个PDE,那么有如下公式:

0xC0300000 + N*4

这里写图片描述

4、页表基址

1、
这里写图片描述

2、有了0xC0300000和0xC0000000能做什么?

掌握了这两个地址,就掌握了一个进程所有的物理内存读写权限。

公式总结:

1、什么是PDI与PTI
10-10-12
2、访问页目录表的公式:
0xC0300000 + PDI*4

3、访问页表的公式:
0xC0000000 + PDI*4096 + PTI*4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值