windows下分页机制浅谈-创新互联

引子:
一直在研究恶意代码方向与逆向软件方向,面试聊了windows内核与保护模式相关知识,有很多没有回答上来,确实研究过相关资料,但是没有深入研究,加上长时间没有复习,有些遗忘了
基本功不扎实,毕竟好久没写过驱动编程与复习内核/保护模式相关的知识,所以静下心来复习一下吧。

4GB的虚拟内存结构:

创新互联公司专业IDC数据服务器托管提供商,专业提供成都服务器托管,服务器租用,联通机房服务器托管联通机房服务器托管,成都多线服务器托管等服务器托管服务。
虚拟内存地址范围 描述
0x00000000~0x0000FFFF64kb大小的空指针区域,当然就不可以访问了
0x00001000~0x7FFFFFFF加上上述的空指针区域,低2GB的用户态空间
0x80000000~0xFFFFFFFF高2GB的内核态空间

更多的详细划分请参考这篇博客:https://blog.csdn.net/wang010366/article/details/52730052


一个进程地址如何映射到物理地址的?
windows下分页机制浅谈
图片一:映射关系
上述图片只是片面的阐释,一个虚拟内存地址通过页表转换,映射到物理内存地址,多个进程其实都是通过这种机制映射到物理内存。
windows下分页机制浅谈
图片二:地址映射过程

图片二是虚拟地址映射,注意:缺少了分页的层级,页表中每一项都是一个分页。映射的物理地址过程如何实现的?先介绍Cr0系列的控制寄存器,面试的时候忘的一干二净,那就在学一遍:

寄存器名称 描述
CR0包含处理器标志控制位,如PE,PG,WP等
CR1保留
CR2专门用于保存缺页异常时的线性地址
CR3保存进程页目录地址
CR4扩展功能(如判断物理地址扩展模式等),Pentium系列(包括486的后期版本)处理器中才实现

windows下分页机制浅谈

图片三:控制寄存器

➀什么是PE,PG,WP呢?
1、PE:CR0寄存器的第0位,Protection Enable,启用保护标志。如果该位为1,开启了保护模式,反之关闭,当开启保护模式的时候PE\PG都会置位。
2、PG:CR0寄存器的第31位,Paging,分页标志位。如果为1则开启分页机制,禁止分页的话线性地址等同于物理地址,若开启标志位意味着需要开启保护模式。
3、WP:CR0寄存器的第16位,Write Proctect,写保护标志。WP==1的时候意味着只读页面不可执行写操作,wp==0的时候意味着只读页面可执行写操作。


➁CR3寄存器保存了每个进程的页目录地址,什么叫做页目录呢?
Windows下开启保护模式与分页机制后,当前CR0寄存器的属性PE == 1 AND PG == 1,意味着进程中的虚拟地址将通过页表转换映射相对应的物理地址上,如图二所示,我们手工的获取来学习:
首先介绍一下分页机制其中一种记录方式:

非物理地址扩展模式 物理地址扩展模式
非PAE模式PAE模式


PAE模式:Physical address extension,物理扩展模式。能够在32位操作系统访问超过4GB寻址大小的模式,允许将最多64GB 的物理内存用作常规的4 KB 页面,并扩展内核能使用的位数以将物理内存地址从32扩展到36。
非PAE模式:在非物理扩展模式下,32位大只能4GB所以,即使你有8G的内存条,也是白费。
那么在非PAE模式下,操作系统分页机制如何实现的?每个分页4kb,一共4GB的内存,4194304KB大小也就是一共1048576个分页,那么如何高效的管理这些分页呢?

1024(PDT) × 1024(PTT) × 4096 = 4GB
1024(PTT) × 1024(PTE) × 4 = 4MB
1024(PDT) ×1024(PTE) = 1MB

如上述公式所示,就是通过这种方式来管理4GB的内存分页,PDT,PTT,PTE又是什么,如下所示

名称 描述
页目录索引表(PDT)一级索引
页表索引表(PTT)二级索引
页表项(PTE)页表项 PDT(1024项PDE),PTT(1024项PTE)

windows下分页机制浅谈
图片四:地址解析

需要配合图二一起理解,操作系统会通过CR3寄存器获取当前进程的页表目录地址,然后根据虚拟地址拆分为10,10,12比例,找到页目录,找到页表,然后找到分页加上对应的偏移(物理内存),为了方便理解,当然也是动手写个小程序,在windbg下一探究竟。


➀编写测试代码,如下所示:

int main()
{
    printf("虚拟地址:0x%X\n", "hello world");
    cout << "hello world" << endl;
    system("pause");
}

➁编译后拖入虚拟机,开启双击调试(测试环境win7 32位),运行测试程序(不要关闭回车),windbg下输入!process 0 0查看全部进程及各部分说明,如下所示:
windows下分页机制浅谈
图片五:双击调试
➂上述进程说明中我们看到DirBase地址,这个就是当前进程指向的页目录,我们看看到底对不对?需要明确的字段PROCESS 0x86ca5c18是EPROCESS的地址,输入指令dt 0x86ca5c18 _EPROCESS来看一看,如下所示:
windows下分页机制浅谈

图片六:EPROCESS
➃一个进程的页目录怎样找?在CreateProcess的第二个阶段,会初始化进程的执行体层EPROCESS数据结构与微内核层KPROCESS数据结构,系统DLL映像目标用户空间且初始化PEB操等等,来看_KPROCESS结构+0x18字段是什么?如下所示:
windows下分页机制浅谈

图片七:DirectoryTableBase

➄通过上述_KPROCESS获取了PDT的地址,与解析出来PDT数据一样的。每当CPU切片执行进程时候,CR3就会被系统切换,CR3是不是读取当前进程DirectoryTableBase字段作为切换数值有待研究,看一看PDT也就是页表转换的第一层结构,如下所示:
windows下分页机制浅谈

图片八:虚拟地址

➅解释两个dd,因为这个以前也总是被同学问起,dd怎么啥东西都找不到,在windbg命令下,d系列命令只能查看虚拟地址, 查看物理地址需要使用!d系列命令,PDT是物理地址,如下所示:
windows下分页机制浅谈
windows下分页机制浅谈
图片九:物理地址
➆根据上述一些理论性知识,如图九中所展示的每项便是页表地址(物理地址),根据虚拟地址,测试是否能通过页表转换找到映射的物理存储数据,所以第二步中没输出字符串虚拟地址(图是昨天的),重新来一下(已经关闭了随机基址),如下所示:
windows下分页机制浅谈
图片十:输出字符串在虚拟内存地址
➇根据图片四把上述的虚拟地址进行分割,如下所示:
windows下分页机制浅谈
图片十一:虚拟地址转换
➈对应的二进制换算16进制 (1 <--> 19 <--> B30),其中1代表是页目录表中的第一项,查看页目录表之前需要对地址页目录的PTE了解,如下所示:

➉如上图所示,低12位是属性,高位是地址, 然后页表索引是19,数组元素是保存的指针,需要乘以4字节,如下所示:
windows下分页机制浅谈
图片十二:页表查找
⑪怎么什么都没有,还记着我们上述说过,这一台记录方式PAE与非PAE,我们现在所处的环境究竟是怎样,我们打开cmd,利用bcdedit命令,先做了解如下所示:
windows下分页机制浅谈
图片十三:bcdedit

⑫修改当前pae模式以及nx模式,pae我们知道是物理扩展模式,nx是缓解机制,使某些内存区域不可执行,并使可执行区域不可写DEP,我们也要改为Always Off模式,如下所示:
windows下分页机制浅谈
修改指令如下:

名称 关闭指令 开启指令
PAEbcdedit /set pae ForceDisablebcdedir /set forceEnable
NXbcdedit /set nx AlwaysOffbcdedit /set nx OptIn

修改后属性如下:
windows下分页机制浅谈
图片十四:属性调整
⑬重启系统后,再次按照上述步骤查找具体的分页数据,如下所示:
windows下分页机制浅谈
图片十五:非PAE下目录表
⑭那么解析虚拟地址之后,如何通过也目录找到具体页表呢?我们需要了解一下页目录中的每一项PDE数据,也就是指针如何分解的,如下所示:

windows下分页机制浅谈
图片十六:页表地址解析

⑮通过上图所示,我们知道低位12位是属性,高位才是地址,意味着我们只需要BaseAddress + 第几项PTT × 4(指针大小)就可以找到相对的页表指针,如下所示:
windows下分页机制浅谈
图片十七:页表

⑯找到了具体的页表地址,也就是0x342f6025,加上具体的偏移(虚拟地址分解出的低12位)就可以找到映射的物理内存数据保存,当然地址还是要把地位属性去掉,用地址+偏移即可,如下所示:
windows下分页机制浅谈
图片十八:物理内存


整个过程解析了虚拟地址将一个地址如何映射到物理内存,他们之间的存在的转换映射关系,当然省略很多机制内部机制。片面的理解保护模式下分页的重要性,我们跟多层面去学习研究虚拟内存与物理内存关系。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文题目:windows下分页机制浅谈-创新互联
标题来源:https://www.cdcxhl.com/article48/gegep.html

成都网站建设公司_创新互联,为您提供网站维护搜索引擎优化网站设计公司云服务器网站内链网站营销

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司