分页机制

一:启动一个计算器程序calc.exe,输入一个字符串123456789


二:启动WinDBG,并附加到计算器程序上开始调试(选择File>Attach to a process…..


三:在WinDBG的命令区输入xcalc!g*命令列出计算器程序中以g开头的所有符号(先要设置好XP系统的符号路径)


四:在WinDBG的命令区输入ddcalc!gpszNum l1命令,查看该符号地址的内容


五:继续查看地址000ac3f0


六:看来000ac3f0指向的很想我们前面输入的数字,使用显示字符串命令再进一步验证


七:先将这个虚拟地址转换成二进制格式,一边了解它的各个位域的值,这可以使.formats命令


根据上图的虚拟地址:页目录索引为0(高10位)  &  页表索引为ac (中间10位)  & 物理页内偏移为3F0

 

八:再启动一个WinDBG的实例,并开始本地内核调试以便观察计算器进程的页目录基地址。(以下所有操作都在这个WinDBG实例中进行的)


九:先通过!process 0 0命令列出所有进程,并在其中找到关于calc.exe的内容


十:上面的DirBase项描述的就是calc进程的页目录基地址的物理地址(CR3寄存器的内容)。也就是说该进程的页目录的及地址是02cc01c0

 

十一:使用!dd02cc01c0命令(显示物理内存,注意有!号)显示页目录表的内容 (02cc01c0指向了一片内存空间,这片内存空间是就有1024个PDE的页目录)



十二:页目录的每一项都是4个字节,因为我们要转换的地址的页目录索引为0,也就是页目录中的第一个表项,就是 02cc01c0指向的4字节的内存单元内容,其内容为8b1801,每个页目录表项的高20位是页表的起始地址的高20位,即我们需要的页表基地址就是8b1,低12位801是这个页表的属性 (结合一个操作系统的实现,看页表的属性)

 

十三:继续使用!dd 命令观察页表,因为页表索引是ac(最上方的虚拟地址ac3f0),每个页表项占4个字节,所以物理页面的基地址应该是8b1000 + ac*4所指向的内存单元中的4个字节的内容,就是PTE的内容(即内容的高20位)

(8b1000指向了一片内存空间,这片内存空间是就有1024个PTE的页表)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows操作系统中,内存分页机制是一种虚拟内存管理技术,用于将物理内存与进程的虚拟地址空间进行映射和管理。内存分页机制的核心概念是将进程的虚拟地址空间划分为固定大小的页面(通常为4KB),并将其映射到物理内存上。 Windows使用了两级的页表结构来实现内存分页机制: 1. 页面目录表(Page Directory Table):页面目录表是一个固定大小的数据结构,用于存储指向页面表的指针。每个页面目录表项(Page Directory Entry)对应着一个页面表。页面目录表通常在系统启动时创建,并且对于每个进程都有一个独立的页面目录表。 2. 页面表(Page Table):页面表是一个固定大小的数据结构,用于将虚拟地址映射到物理地址。每个页面表项(Page Table Entry)包含了虚拟地址与物理地址的对应关系。页面表通常在进程创建时动态生成,并且只包含当前进程所需的页面映射。 通过这两级的页表结构,Windows可以实现虚拟地址到物理地址的映射。当进程访问虚拟地址时,操作系统会根据页表将其转换为物理地址,并进行相应的读取或写入操作。如果所需的页面不在物理内存中,则会触发页面错误(Page Fault),操作系统会将页面从磁盘加载到物理内存中,并更新页表的映射关系。 内存分页机制的好处是可以实现虚拟内存的管理和保护。每个进程都有独立的虚拟地址空间,使得进程之间的内存不会相互干扰,同时允许操作系统灵活地分配和回收物理内存。此外,内存分页机制还支持内存权限控制、页面共享和延迟加载等功能,提高了系统的安全性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值