内存分页以及控制寄存器相关的学习

地址转换总述

这里写图片描述

根据KProcess中的Cr3中保存的页目录基址,可以找到页目录起始地址,再根据页目录索引找到PDE(Page Directory Entry)中的PFN(Page Frame Number,页面帧编号),进而找到所对应页表,结合页表索引,找到页表项(PTE),进而找到目标内存页,再结合字节索引,就能找到物理内存地址空间;

虚拟地址转换物理地址(关闭PAE)

首先在被调试的系统中,写了一个程序,并获得了打印的字符串的地址:12ff3c
开始双机调试
首先调换进程环境到被调试的进程

!process 0 0

使用这个命令列出当前所有的进程

PROCESS 85041d40  SessionId: 1  Cid: 0ed0    Peb: 7ffd3000  ParentCid: 070c  DirBase: 11997000  ObjectTable: afe35b40  HandleCount:  13
Image: SwitchAddrOffset.exe 

Process 就是这个进程的加载基址
DirBase :是CR3,也就是页目录的基址
使用命令切换到这个进程 :

.process/i xxx程序加载基址

然后点 g 一下,让系统断下来
然后找到页目录表,也就是DirBase(CR3寄存器)中保存的值

!dd xxx地址

表示使用的是物理地址,因为进程已经创建 ,页表已经映射到物理地址中 ;
虚拟地址提前按照10 ,10,12位 分开
12ff3c 按照10,10,12分开之后为:00,12f,f3c
说明00 是页目录的索引,也就是第一个地址 :这里地址是 11d98867
因为这个地址的前12项(前12位)保存的是页表的属性等信息,所以实际的地址应该是:11d9800(后面20位) 、
上面这一段话可以结合下面这幅图来理解:
这里写图片描述
这个地址是页表的首地址,然后页表的索引是12f,因此可以找到这个地方,从而获得实际的物理地址 :
!dd 11d98000+4*12f
得到的地址是:212e0867,
同样的,后面的12个位是属性等信息,所以实际的物理是:212e000 ,
物理地址加上偏移,就是实际物理地址212e000 + f3c;

PAE模式

这里写图片描述
PAE模式相对于传统模式多了一个PDPTE,PAE模式下的PDE与PTE都变成了8个字节;

控制寄存器

cpu中有一组控制寄存器 ,用于控制和确定CPU的操作模式

Cr0Cr1Cr2Cr3Cr4

其中:Cr1 保留 ;Cr3 是叶目录基址

Cr0寄存器,页保护

这里写图片描述
PE(Protect Table):
1.当CR0 的位 0是启动保护标志位;
2.PE=1 保护模式,PE=0,实地址模式,这个标志位仅开启段级保护,而没有启动分页机制 ;
3.若要启动分页机制,那么PE的PG标志都要置位
PG:当设置改位时立即开启了分页机制。在开启这个标志位之前必须已经或者同时开启PE标志

PGPE处理器工作模式
00实地址模式
01在没有开启分页机制的保护模式下(没有这种操作系统
10PE没有开启,PG无法开启,因此也不存在这种情况
11在开启了分页机制的保护模式下
Cr2寄存器

当cpu 访问某个无效页面的时候,会产生缺页异常,此时,CPU会将引起异常的线性地址存放在CR2中

Cr4寄存器

这里写图片描述

PAE/PSE说明 :
PAE=1 是PAE分页;
PAE =0 是普通分页;

MSR寄存器(特殊模块寄存器)

每一个MSR寄存器都有它的编号;
可以使用下面的指令进行读写(特权权限指令):
rdmsr:ecx存放序列号,执行完之后数据放在eax中;
wrmsr:ecx存放序列号,eax存放数据,执行完后将eax写入到相应寄存器中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值