
2-9-9-12分页机制(xp)
发布日期:2021-05-19 04:41:48
浏览次数:19
分类:原创文章
本文共 826 字,大约阅读时间需要 2 分钟。
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即可读取此高地址的内存
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月17日 05时34分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux经常使用命令(十一) - more
2025-04-10
linux缓存nscd
2025-04-10
LINUX编程实战指发送UDP消息
2025-04-10
Linux虚拟机上安装redis
2025-04-10
linux软件包的一般安装方法
2025-04-10
linux软件包:RPM包、源码包、yum在线
2025-04-10
Linux进程地址管理之mm_struct
2025-04-10
Linux进程管理实战指南:实用工具命令详解
2025-04-10
Linux部署Elasticsearch(一):下载和部署Elasticsearch
2025-04-10
linux防火墙规则
2025-04-10
Linux高阶知识:Linux 中的隐藏文件
2025-04-10
Linux(3):Linux命令-文件管理
2025-04-10
Linux(7):VIM的使用
2025-04-10
linux(乌班图)修改apt下载源
2025-04-10
Linux:CentOS安装Docker Compose
2025-04-10
Linux:安装Redis
2025-04-10
List,Set,Map三者的区别(不同点)
2025-04-10
List<T> to DataTable
2025-04-10
ListBox 循环删除当前项
2025-04-10