10-10-12分页机制(xp)
虚拟地址到物理地址
虚拟地址空间就是32位系统的那4GB,这4GB空间的地址称为虚拟地址。虚拟地址经过分段机制后转化为线性地址,一般虚拟地址都等于线性地址,因为大多数段寄存器的基地址都为0,只有FS段寄存器的基地址不会0。线性地址经过分页机制最终映射到物理地址上。
页目录表,页表
页目录表实际是特殊的页表,普通的页表的页表项都指向物理页,而页目录表的页目录项指向的是其他页表。
CR3寄存器中前20位存储的是页目录表的物理基地址,每个进程的CR3都不同,也就是每一个进程都有自己的一套页表。
页目录表项PDE前20位存取的是页表的物理基地址,而后12位为属性。其P/S位如果为1表示物理页大小为2的22次方(10 + 12) = 4MB(大页)也就没有页表了,如果为0表示物理页大小为4kB。
页目录表项PDE的第0位为有效位,第1位为R/W读写位(0只读,1可读可写),U/S位为权限位(0特权用户可以访问,1普通用户可以访问):例如一些高2Gb地址空间的地址在用户层不能访问就是因为此地址空间中地址对应的U/S位为0。A位为访问位表示是否被访问过,D位为写位表示是否被写过。当ps位为1时表示G位有效,其G位为1时表示此线性地址为全局页,即当CR3改变(进程切换时),CPU中存储的TLB表对应的此地址的项并不会刷新。
以上这些属性页表项也有,而且对应物理地址的最终属性为PDE的属性与上PTE的属性。
注意:当PDE的PS位为0时无论是页表目录还是页表,其都是物理页,且页面大小都是4KB
10-10-12分页
10-10-12分页的意思是将32位线性地址拆分成10位-10位-12位。
第一个10位为页目录表的索引,第二个10位为页表的索引,第三个12位为物理页中的偏移地址。这是对物理页为4kb的而言,也就是说页目录表项的PDE的PS位为0。当ps位为1 时表示使用的是4MB的物理内存页,那么线性地址的第2个10位和第三个12位组成物理地址的低22位,其他28位在页目录项PDE中存储。
页目录表基地址,页表基地址
页目录表的线性基地址为0xC0300000,而页表的线性基地址为0xC0000000。因为页目录表就是页表而且其表大小都是2的10次方(0x1000个字节),所以页目录表实际是第0x300个页表。0xC0300000线性基地址指向的物理地址就是CR3指向的物理地址。
//PDI为线性地址的第一个10位,PTI为线性地址的第二个10位
0xC0300000 + PDI * 4 //访问页目录表
0xC0000000 + PDI * 4096 + PTI * 4 //访问页表
读写0地址
如果直接读写0地址会出错,我们可以查看一下线性地址0x00000000对应的物理地址。CR3为0x16f5a000,查看其PTE为0说明并没有为0地址挂物理页所以不能读写此地址。
我们要想读写0地址就要为其挂上物理页,我们可以利用VirtualAlloc申请虚拟内存,然后将此虚拟内存对应的物理页挂到0地址处。假设VirtualAlloc申请的虚拟内存地址为0x003F0000,我们查看其PDE与PTE。
0线性地址的PDE与0x003f0000地址的PDE相等,我们将0x003f0000的PTE写到0地址的PTE地址处,这样就为其挂上了物理页。
这时我们在读写0地址都不会出错,因为其已经分配了物理页。我们还可以在应用程序中提权后,根据页目录表基地址0xC0300000和页表基地址0xC0000000找到任意虚拟地址的PDE和PTE从而控制他们的属性。
!vtop cr3 虚拟地址 //得到虚拟地址对应的页表和物理地址等信息
10-10-12分页机制(xp)的更多相关文章
- .NET Core采用的全新配置系统[10]: 配置的同步机制是如何实现的?
配置的同步涉及到两个方面:第一,对原始的配置文件实施监控并在其发生变化之后从新加载配置:第二,配置重新加载之后及时通知应用程序进而使后者能够使用最新的配置.要了解配置同步机制的实现原理,先得从认识一个 ...
- 北京Uber优步司机奖励政策(10月12日~10月18日)
用户组:优步北京人民优步A组(适用于10月12日-10月18日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万 ...
- 非寻常方式学习ApacheTomcat架构及10.0.12源码编译
概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...
- 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
int [][]a={{3,2,6},{6,8,2,10},{5},{12,3,23}}; //先对二维数组进行遍历:然后把二维数组合成一个数组 int[] k=new int[11]; int q= ...
- 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...
- 10月12号 晚八点 Speed-BI 云平台-基于Excel数据源的管理驾驶舱构建全过程,腾讯课堂开课啦
认真地做了一大摞一大摞的报表,老板没时间看?努力把能反馈的内容都融汇进图表里,老板嫌复杂?做了几个简单的报表,老板一眼就觉得信息不全面?每个报表都用了各种各样的图表,老板却毫无兴趣?明明很努力了,为什 ...
- 2016年10月12日 星期三 --出埃及记 Exodus 18:23
2016年10月12日 星期三 --出埃及记 Exodus 18:23 If you do this and God so commands, you will be able to stand th ...
- WMware 10 Ubuntu 12.04 进入Unity模式
/********************************************************************* * WMware 10 Ubuntu 12.04 进入Un ...
- Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据
今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...
随机推荐
- python网络编程-TCP服务端的开发
#TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何一个ip地址 ...
- Paint Chain HDU - 3980
题目链接:https://vjudge.net/problem/HDU-3980 题意:由n个石头组成的环,每次只能取连续的M个,最后不能取得人输. 思路:这样就可以先把它变成链,然后在链上枚举取m个 ...
- 【数据库】Redis(2)--Redis的常用数据类型及命令
1.Redis主要数据类型分类 Redis中存储数据常用的数据类型主要有五种:String.List.Set.Sorted Set.Hash,这五种数据结构在Redis中存储数据的命令掌握对于我们后期 ...
- Android studio 简易登录界面
•参考资料 [1]:视频资源 [2]:Android TextView设置图标,调整图标大小 •效果展示图 •前置知识 TextView EditText Button 以及按压效果,点击事件 •出现 ...
- 第16 章 : 深入理解 etcd:基于原理解析
深入理解 etcd:基于原理解析 本文将主要分享以下三方面的内容: 第一部分,会为大家介绍 etcd 项目发展的整个历程,从诞生至今 etcd 经历的那些重要的时刻: 第二部分,会为大家介绍 etcd ...
- 痞子衡嵌入式:MCUXpresso IDE下在线调试时使用不同复位策略的现象总结
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线调试时使用不同复位策略的现象总结. 本篇实际上是<IAR在线调试时设不同复位类型可能会导致i.M ...
- 2020 OO 第二单元总结
只要跑得够快即使从头关到尾你也喜欢吗? 一.设计策略 1.1 总体策略概述 在多线程的协同和同步控制方面,我三次作业都是采用生产者/消费者模式(还憨憨地在内部分了customer.producer.t ...
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16
自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习 制作Ope ...
- Android通过Web与后台数据库交互
2021.1.27 更新 已更新新版本博客,更新内容与原文章相比有点多,因此新开了一篇博客,请戳这里. 1 背景 开发一个App与后台数据库交互,基于MySQL+原生JDBC+Tomcat,没有使用D ...
- 如何查看显著性SNP在数据中的频率?
我们做完GWAS的关联分析后需要查看显著性SNP在我们数据中的频率分布情况.这时候我们需要用到plink和我们做关系分析所用的二进制文件datas. 第一步,我们用R语言读取分析结果,即*.assoc ...