Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

10-10-12 分页机制

1. CPU是如何通过线性地址查找物理地址的?

2. MMU是什么?

3.CPU内存管理内部大体结构框架?

4.会写、直接、不缓存什么概念?

5.CR3、PDE、PTE之间的关系?

6.用一进程的内存结构分析

7.操作系统与CPU的页密度

8.使用!vtop指令解析物理地址

9.通过挂物理页来实现0地址读写

10.修改PDE与PTE属性来实现对只读内存(字符串)的操作

11.页属性的A位、D位(Dirty脏位)与G位的说明

12.PDE的PS位(大页)

1. CPU是如何通过线性地址查找物理地址的?

通过一块MMU内存控制单元

2. MMU是什么?

内存管理单元,是一个模块(我们也可以看成一个函数)。

物理地址 func(CR3,线性地址);

其就是将线性地址按我们的步骤拆分成物理地址(10-10-12)。

3.CPU内存管理内部大体结构框架?

4.回写、直接、不缓存什么概念?

三者都是针对缓存来讲的。

1)回写:先写到缓存,等一会数据量够了再写到内存中。

2)直写:写到缓存的同时直接写到内存中。

3)不缓存:不经过缓存,直接写到内存中。

5.CR3、PDE、PTE之间的关系?

6.用一进程的内存结构分析

将一全局变量的程序运行两份进程,地址同时打印出来,然后观察两者的PTE结构。

结论,一个程序运行多份,挂的不是同一个物理页。

Failed to get VadRoot

PROCESS 815d78b0  SessionId: 0  Cid: 00fc    Peb: 7ffdf000  ParentCid: 0604

DirBase: 18d4f000  ObjectTable: e21786b8  HandleCount:   7.

Image: pteTest.exe

Failed to get VadRoot

PROCESS 81e96528  SessionId: 0  Cid: 00d8    Peb: 7ffd5000  ParentCid: 0604

DirBase: 193d7000  ObjectTable: e21f4ea8  HandleCount:   7.

Image: pteTest.exe

第一种情况

18d4f000

18c5a000

18943000

18943a30 02

第二种情况

193d7000

19670000

1950a000

1950aa30  02

7.操作系统与CPU的页密度

操作系统以64K为单位,CPU以4K为单位。

因此申请一块内存,最小不是4K而是一次64K,但是在内核记录时却被记录成多个4K的页的个数。

8.使用!vtop指令解析物理地址

对于分页的拆分,我们往往得到进程的CR3然后手动来拆分,当然如果我们熟练的话,可以直接使用!vtop指令。该指令会手动地帮助我们拆分物理地址。

!vtop [CR3地址] [物理地址]

使用效果:

kd> !vtop 1a3c9000 425a30

X86VtoP: Virt 0000000000425a30, pagedir 000000001a3c9000

X86VtoP: PDE 000000001a3c9004 - 19f1d067 (PDE)

X86VtoP: PTE 0000000019f1d094 - 1a286067 (PTE)

X86VtoP: Mapped phys 000000001a286a30 (物理地址)

Virtual address 425a30 translates to physical address 1a286a30.

9.通过挂物理页来实现0地址读写

线性地址0本质就是没有挂物理页,只要我们挂上物理页很容易实现

源代码:

#include "stdafx.h"

int x = 123;

int main(int argc, char* argv[])

{

printf("%x\n",&x);

getchar();

getchar();

getchar();

printf("%d\n",*(int*)0);

return 0;

}

操作方法:通过查看变量x的地址来获取其物理页的PDE、PTE,在windbg中修改零地址对应的PDE、PTE(其实只修改PTE即可,一般就是该位置为0),然后你发现就可以读取数据并不会报错。

10.修改PDE与PTE属性来实现对只读内存(字符串)的操作

注意:限制可能还被段限制,但一般是页限制,因为段一次就要限制很多,一般不会做过多限制。

我们知道PDE与PTE的后三位代表属性,具体属性见下图:

其该物理页的最终属性是 PDE & PTE 的结果。

我们结合!vtop指令,能让本来不可写的内存改为可写,具体操作如下。

#include "stdafx.h"

int main(int argc, char* argv[])

{

char *str = "abc";

printf("%x",str);

getchar();

getchar();

getchar();

str[0] = 'b';

printf("%s",str);

return 0;

}

其该地址 !vtop 解析的结果:

kd> !vtop 0de1d000 423020

X86VtoP: Virt 0000000000423020, pagedir 000000000de1d000

X86VtoP: PDE 000000000de1d004 - 0b925067

X86VtoP: PTE 000000000b92508c - 03014025

X86VtoP: Mapped phys 0000000003014020

Virtual address 423020 translates to physical address 3014020.

通过分析可以看出是其PTE的属性加以修改和限制,我们来修改这个即可。

!dq b92508c  03014067

之后运行程序,就可以发现其被修改。

11.页属性的A位、D位(Dirty脏位)与G位的说明

TLB存储缓存时当写满了会进行优化,然后找到最差的将其删除,来空出位置添加新的。

A表示访问,D表示写入,G表示不可删除。

TLB表中存在A位与D位的计数索引,来达到优化的目的,但是如果G位为1,则及时其是性能最差的,其CPU也不会将其从TLB中删除的。

12.PDE的PS位(大页)

大页是以4M为一个单位,当你一次申请100M的内存时,其可能给你分配个大页。

当遇到大页时,其没有PTE,后面22位就是偏移地址,在PDE的基础上来计算其偏移地址就好,这很好理解。

来源:https://www.cnblogs.com/onetrainee/p/12512847.html

html table vtop,10-10-12 分页机制相关推荐

  1. 2020年10月12日斗鱼虎牙合并的瓜

    斗鱼.企鹅电竞.虎牙的瓜 前言 今天看知乎的时候 ,看到了斗鱼被转让企鹅电竞业务并退市,斗鱼.虎牙将按 1:1 合并,直播行业将迎来哪些变化?.好奇之下看了看.里面的知乎网友说了许多有意思的观点.可惜 ...

  2. 品钛路演PPT曝光:发行区间10到12美元 即将美国上市

    雷帝网 雷建平 10月23日报道 金融科技解决方案提供商品钛(PINTEC)本周将在纳斯达克交易所上市,股票代码为"PT",主承销商为高盛.德意志银行.花旗银行,副承销商为工银国际 ...

  3. 【教学类-33-01】20230417食物交换卡片1.0版(6、8、10、12以内的随机数量+绘画+等量交换)(中班:偏科学-数)

    作品效果 背景需求 探究PPT图标里面的矢量图有什么与教学相关的用途 代码 ''' 目的: 1.根据食物卡片的每种食物数量写出数字或者尝试交换卡片(6以内.8以内.10以内.12以内) 2.作者:阿夏 ...

  4. SAP MIGO对工单做101收货,报错 - Check table TFBEFU_CR entry 10 does not exist – 对策

    SAP MIGO对工单做101收货,报错 - Check table TFBEFU_CR entry 10 does not exist – 对策 执行事务代码MIGO,移动类型101,对某工单执行入 ...

  5. 《软件建模与设计: UML、用例、模式和软件体系结构》一一2.10 UML扩展机制

    本节书摘来自华章计算机<软件建模与设计: UML.用例.模式和软件体系结构>一书中的第2章,第2.10节,作者:(美)Hassan Gomaa,更多章节内容可以访问云栖社区"华章 ...

  6. 找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}

    package com.homework.zw; //解题思路:先遍历二维数组的所有元素,用这些元素组成新的一维数组.然后利用冒泡排序找出一维数组的最大元素和最小元素. public class wo ...

  7. 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)

    使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号) i = 1 # 定义一个自增变量i,初始值从1开始 ...

  8. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  9. Java 练习:编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天数。月份为 1、3、5、7、8、10、12 时,天数为 31 天。月份为 4、6、9、11 时,天数为 3

    文章目录 一.练习题目 二.使用 switch 语句实现代码 三.将代码改写回 if else 的选择结构 一.练习题目 编写 Java 程序,输入年份和月份,使用 switch 结构计算对应月份的天 ...

最新文章

  1. linux内核 机器码,u-boot与Linux内核机器码问题
  2. Mac的移动硬盘不能装载该如何解决?
  3. 三个基于.net的浏览器内核使用的比较
  4. Confluence 6 在升级之前
  5. jsp里面的input的值吗_一个jsp页面中的input框向另一个jsp页面的input框传值
  6. 基于基站定位数据的商圈分析代码详细解释
  7. 你知道面试官是如何刷人的吗
  8. linux u盘加载阵列卡驱动步骤,Linux U盘加载阵列卡驱动步骤
  9. MapReduce案例
  10. 和python高级知识_Python中的5个高阶概念属性的知识点!你要了解明白哦!
  11. sudo和su命令简介
  12. fedora mysql添加密码_Fedora14下 mysql更改密码
  13. axios 封装数据请求
  14. Blender插件BoxCutter 7.1.7v15 硬表面建模2.91+教程Box Cutter
  15. 先正达谋定农化世界竞争格局-丰收节贸易会:座次重排
  16. 我在上海奋斗的五年---从月薪3500到700万(读后感:一个真汉子的人生)
  17. 群晖docker安装青龙面板自动狗东京豆领取
  18. 实战项目:Boost搜索引擎
  19. 国密PSAM卡与CPU(用户卡)操作过程 小结
  20. 群晖服务器共享文件忘记密码,群晖NAS忘记登录的账号密码怎么办?

热门文章

  1. 要读博士硕士的学生看看吧
  2. 总有你挂不完的环保吊牌GRS/RCS/SCS/OBP/OCS/GOTS/……
  3. md5 16位加密 java_MD5加密,MD5在线加密,MD5校验
  4. 基于matlab读取envi格式高光谱图像数据
  5. 第三方百度网盘下载工具
  6. java程序设计教学改革_《Java程序设计》课程教学改革与实践
  7. reCAPTCHA验证码
  8. SkeyeVSS以智能手段助力乘梯消防安全电梯AI智能监控解决方案
  9. J-link下载出现Verification of RAMCode failed @ address 0x20000000问题的解决
  10. matlab 可靠性,matlab可靠度.pdf