Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
- 要点回顾
- 一、页目录表基址
- 实验:拆分线性地址C0300000,并查看其对应的物理页
- 第一步:打开一个进程,获得它的Cr3
- 第二步:查看进程的PDT表
- 第三步:拆分线性地址
- 第四步:查看线性地址对应的物理页
- 实验总结
- 二、页表基址
- 实验:拆分线性地址C0000000,并查看其对应的物理页
- 第一步:打开一个进程,获得它的Cr3
- 第二步:查看进程的PDT表
- 第三步:拆分线性地址
- 第四步:查看线性地址指向的PDE所对应的PTT表
- 第五步:查看线性地址C0001000对应的PTT表
- 实验总结
- 总结
要点回顾
在上一节课课后题中我们提到过,如果系统要保证某个线性地址是有效的,那么必须为其填充正确的PDE与PTE
如果我们想填充PDE与PTE,那么必须能够访问PDT与PTT,这样就存在2个问题:
- 一定已经有“人”为我们访问PDT与PTT挂好了PDE与PTE,我们只用找到这个线性地址就可以了
- 这个为我们挂好PDE与PTE的“人”是谁?
注意:
CR3中存储的是物理地址,不能在程序中直接读取的。如果想读取,也要把Cr3的值挂到PDT和PTT中才能访问,那么怎么通过线性地址访问PDT和PTT呢?
注意:以下所有实验的分页方式均为10-10-12分页
一、页目录表基址
页目录表基址 = 线性地址:C0300000
实验:拆分线性地址C0300000,并查看其对应的物理页
第一步:打开一个进程,获得它的Cr3
我这里打开的是notepad.exe
第二步:查看进程的PDT表
注意PDT表中的数据
第三步:拆分线性地址
十六进制:C0300000
=二进制:1100 0000 001100 0000 000000 0000 0000
=十六进制:300300000
第四步:查看线性地址对应的物理页
注意:若不知道怎么查找物理页可以翻看前两篇笔记
可以发现 物理页的内容 与 PDT表的内容 完全相同
实验总结
- 线性地址C0300000对应的物理页就是页目录表
- 这个物理页即页目录表本身也是页表
- 这个物理页是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其它的页表
- 访问页目录表的公式:
C0300000 + PDI*4
(I=index)
结构图如下:
二、页表基址
页表基址 = 线性地址:C0000000
实验:拆分线性地址C0000000,并查看其对应的物理页
第一步:打开一个进程,获得它的Cr3
我这里打开的是notepad.exe
第二步:查看进程的PDT表
查看前三个PDE所对应的PTT表
第一张PTT表:
第二张PTT表:
第三张PTT表:
第三步:拆分线性地址
十六进制:C0000000
=二进制:1100 0000 000000 0000 000000 0000 0000
=十六进制:300000000
第四步:查看线性地址指向的PDE所对应的PTT表
查看前三个PTE所对应的物理页
第一张物理页:
第二张物理页:
第三张物理页:
可以发现 每一项PTE所指向的物理页的内容 与 每一个PDE所指向的PTT表的内容完全相同
第五步:查看线性地址C0001000对应的PTT表
发现线性地址C0001000指向的PTT表的第一项PTE为线性地址C0000000指向的PTT表的第二项PTE
实验总结
- 页表被映射到了从
0xC0000000~0xC03FFFFF
的4M地址空间 - 在这1024个表中有一张特殊的表:页目录表
- 页目录被映射到了0xC0300000开始处的4K地址空间
- 访问页表的公式:
0xC0000000 + PDI*4096 + PTI*4
(I=index)
结构图如下:
总结
- 有了0xC0300000和0xC0000000能做什么:
掌握了这两个地址,就掌握了一个进程所有的物理内存读写权限 - 公式总结:
访问页目录表的公式:C0300000 + PDI*4
(I=index)
访问页表的公式:0xC0000000 + PDI*4096 + PTI*4
(I=index)
Windows保护模式学习笔记(八)—— 页目录表基址/页表基址相关推荐
- Windows保护模式学习笔记(十二)—— 控制寄存器
Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...
- Windows保护模式学习笔记(九)—— 2-9-9-12分页
Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...
- Windows保护模式学习笔记(七)—— PDEPTE
Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...
- Windows保护模式学习笔记(十四)—— 阶段测试
Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...
- Windows保护模式学习笔记(十三)—— PWTPCD
Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...
- Windows保护模式学习笔记(十)—— TLB
Windows保护模式学习笔记(十)-- TLB 地址解析 10-10-12分页 2-9-9-12分页 TLB TLB结构 TLB种类 练习1:体验TLB的存在 第一步:运行代码 第二步:设置中断门描 ...
- Windows保护模式学习笔记(六)—— 10-10-12分页
Windows保护模式学习笔记(六)-- 10-10-12分页 基本概念 4GB内存空间 有效地址-线性地址-物理地址 有效地址与线性地址 物理地址 控制寄存器:Cr3 10-10-12分页 实验:通 ...
- Windows保护模式学习笔记(一)—— 段寄存器GDT表
Windows保护模式学习笔记(一)-- 段寄存器&GDT表 保护模式 参考书籍: 一.段寄存器 段寄存器的结构 段寄存器的读写 段寄存器的属性 1)探测Attribute: 2)探测Base ...
- Windows保护模式学习笔记(五)—— 任务段任务门
Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...
最新文章
- Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)
- mysql修改配置文件内存后无法启动_记一次Oracle实例在修改内存大小后无法启动的惊悚经历...
- PHP带头大哥谈程序语言的学习体会!
- Python Extension
- 【时间序列预测】基于matlab LMS麦基玻璃时间序列预测【含Matlab源码 1443期】
- 1-JavaScript高级程序设计-简介
- 综合能源管理服务认证是什么 , 综合能源服务认证有什么要求?
- 荐一个不错的UI设计网站: uimaker
- 软件设计师2021考试大纲
- 微信小程序上线审核流程
- Wordpress主题制作基础教程
- 探讨广东技术师范大学Windows下MentoHUST上网认证
- CoinCola研究院 | 从技术的角度解读BCH分叉升级
- linux执行arm文件,Linux安装FFMPEG转换amr为mp3格式
- win10系统安装jdk8,并且配置环境变量教程
- 西门子博途1200码垛机、立体仓库程序(带注释),程序应用到 变频器、触摸屏、步进电机、工业机器人、视觉相机。
- 王者荣耀服务器什么时候维护结束,王者荣耀维护更新到几点 王者荣耀今天维护多久 新赛季几点维护完?...
- 数控铣削图案及编程_数控铣床漂亮编程图案 数控铣床编程100例
- Mac磁盘分析工具ncdu使用
- java 多态应用 编写 LOL商店英雄购买
热门文章
- AI:2020年6月22日北京智源大会演讲分享之09:50-10:40 Anil教授《Pattern Recognition: Statistics to Pattern Recognition》
- Dataset之iGAN:iGAN数据集的简介、安装、使用方法之详细攻略
- Funny:还是程序猿会玩——弹幕炸天学AI和区块链,玩起来!弹慕君,你也值得拥有!
- sklearn中的回归决策树
- 通用PE工具箱安装图解
- Pycharm运行时找不到文件问题
- BLE安全机制从入门到放弃
- c++新特性11 (10)shared_ptr一”概述“
- 在 Eclipse 上建立一个 JSP
- 形式化方法、《大象:Thinking in UML》