2-9-9-12分页机制(xp)
2024-08-30 22:46:14
10-10-12分页限制
10-10-12分页因为页表PEB只有四个字节所以只能访问2^32 = 4GB物理地址空间,现在的物理内存都大于4GB为了能访问到更多的物理内存2-9-9-12将PEB的大小增加到了8个字节,其中36位用来表示物理页基地址,这样就可以访问到2^36 = 64GB物理地址空间。因为一个物理页大小一般为4kb,为了增加页表中PEB的大小,所以页表长度就减小了(10减到9)。
2-9-9-12分页
线性地址的2是页目录指针表PDTPT的索引,9是页目录表PDT的索引,下一个9是页表PTT的索引,下一个12是页内偏移地址。
PDTPT,PDT,PTT的每一项都是八个字节。CR3现在指向的是PDTPT页目录表指针表,0-4位忽略后0-31位表示PDTPT表物理基地址。
PDTPE是页目录指针表项,其0位依然是P有效位,0-35位指向PDT页目录表(0-11位置0)。
PDE的PS位如果为1,表示物理页大小为2^ 21 (9 + 12)= 2MB,最高位XD(NX)位为不可执行位,如果此位为1则此地址的数据不能作为代码执行。G位是全局位(此线性地址为高2GB地址)只有当其PS位为1时才有G位否则无G位,如果为1那么当CR3变化时,不会清除TLB表中此地址对应的项,提高效率。
PTE也有XD不可执行位和G位全局位,注意只要PDE和PTE中其中一个的XD位为1就可以使此地址对应的数据无法执行。其他位都需要与一下。
在3环读写高2GB地址内存
printf("0x%x", (*(DWORD*)0x8003f048));
(*(DWORD*)0x8003f048) = 0x12345678;
printf("0x%x", (*(DWORD*)0x8003f048));
我们在windbg中查看地址0x8003f048线性地址对应的物理地址等信息。
我们在windbg中将PDE和PTE的的U/S位设为1即可读取此高地址的内存
最新文章
- 单元测试与Moq
- Java面向对象之多态
- 基于canvas的前端图片压缩
- Swift实战-豆瓣电台(五)播放音乐
- Windows环境配置Apache+Mysql+PHP
- Windows 7的100M隐藏分区
- JSON (仅限本地)
- Programming Collective Intelligence
- 在JAVA中开发应用之html5离线应用
- 谈论HashMap,HashSet,HashTableeasy被我们忽视
- WIN10使用管理员权限运行VS2013
- Python的json and pickle序列化
- python decorator 进阶
- Oracle 执行计划(二)------表访问的几种方式
- json 字符串包含数组转换为object对象是报异常java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
- Linux下Tomcat项目启动报错
- IDEA项目搭建一——使用Maven创建多模块项目
- robot framework —— 变量文件
- 正则表达式学习之grep,sed和awk
- linux没有那个文件或目录