内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理

一丶熟悉WinDbg的常见命令.

dd 虚拟地址      显示内存.

!dd 加上!,        ! dd 物理地址     专门用于显示物理地址的.

!PTE  虚拟地址:   微软给你计算出PDE,和PTE的虚拟地址的位置.(自动查表并且进行操作)

例如随便求一个虚拟地址:

DD命令的使用:

当然, db则是一个字节一个字节显示, dQ则是八个字节显示.

!dd, 物理内存显示:

!PTE 查询页目录表和页表.

微软给的是虚拟地址,我们只需要再次进行DD 这个虚拟地址即可.

二丶寻址结构图

昨天我们讲解的是32为下4M+4K的做表方式.  一个页目录表.一个页表 (PDE,PTE),虚拟地址当作下表进行寻址动作.

然后还有一个寻址结构图

1. 首先第一步,虚拟地址是段加偏移的方式  例如: CS:00401000

2.而后,段CS,当作选择子去GDT表中查表.找到线性地址. 因为GDT微软不使用.所以GDT表中的段首地址是0,所以 0 + 我们的偏移,找到线性地址. 图中(linAddr)

3.而后线性地址,拆分成索引.去查询页目录表. 而后继续查询页表.而后从页表中取出物理地址,加上虚拟地址的偏移.则是一个完整的物理地址.

  PS: 因为GDT没有使用,所以如果不开启分页保护.这个线性地址就是物理地址.但是现在开了,所以要查询物理地址,看下图

0-15是段选择子,0-31是虚拟地址. 段选择子去GDT查表.加上我们的虚拟地址就是物理地址. 而是否开启分页保护,就是修改CR0的标志位.上一篇已经讲过了.

这里查表,拆分成了索引.但是昨天我们只学习了4M+4K的查表方法.虚拟地址的前20位做索引. 查询.

但是32位下还有别的做表方式.

三丶32位下的PDE,PTE表,以及通用查表方法(通用: 指的是大同小异)

看一下32位下的做表的图:

32位系统下,PDE有1024项,每一项是4个字节,其中存储了页表的位置.

这个就是我们昨天就爱了各国的.

1.首先从CR3中取出页目录表(PDE)

2.虚拟地址作为下表查询PDE.

3.根据查询的PDE表项.找出PTE的位置.

4.根据索引.查询PTE的位置.

5.根据PTE中的内容.加上我们的虚拟地址的后12位,就得出了这个线性地址在物理地址的位置.

实战演练:

查询GDT虚拟地址的物理地址.

1.获取GDT的虚拟地址, 获取CR3的值.

VA =  8003F00

CR3 = 39000

2.查分虚拟地址.当作下表.查询页目录表的位置.

8003f000 保留低12位 = 8003f

查分为索引.

8003f = 10000000000000111111

对2进制分割. 分为前10位.后10位.从右往左分割. 前10位索引当作 PDE的下表. 后10位的索引当作PTE的下表.

1000000000           0000111111

PDE = 1000000000 ,转为16进制 = 0x200

PTE = 0000111111   ,转为16进制 = 0x3f

由此得出下表.

3.根据下表进行查表.

CR3是PDE的首地址. 所以我们直接用WinDbg进行查表即可.

公式:

  物理地址 * 索引 *4, 为什么*4,因为PDE的一个表项是4个字节

由此得出页表的位置(PTE)

4.查询页表(PTE)

我们从PDE表项中,取出前20位,然后加上12位,继续进行查表.

为什么这样做.上一篇已经介绍了表格式了.

5.根据PTE的内容.找出物理地址的位置.

根据上图,我们已经找到物理地址了.

取出前20位,加上虚拟地址的后12位偏移.则是物理地址了.

找出了所在的物理地址了.

此时我们dd 虚拟地址.查看是否两块内存是一样的.

至此.我们的查表已经完成.

但是.我们这样查询是错误的.为什么?

首先查询方法是正确的.类似于上面.我们已经正确的查询到了物理地址. 但为什么又说是错误的.

原因:

  操作系统在做分页管理的时候.不一定是4M+4k的这种表来做的. 有可能有更大的表.

所以我们要看标志位进行查表

四丶标志位介绍.

上图介绍了标志位为什么.表项做多大的.

1. 如果PSE和PS位都为1.那么这个表就做成4MB的.

2.如果PS位为0.PSE位无效那么这个表就做成4kb的.

3.如果PAE为1,PS位为1,则表项做成2MB的.

我们要看标志位进行查表.

PAE位 (物理地址扩展): 存放在CR4寄存器的第五位.

PSE位 (页尺寸扩展): 存放在CR4寄存器的第4位.

PS位:  存放在PDE(页目录表的第7位)

上面所说的.都是从左往右的位.

比如: 

  CR4寄存器的值 = 0x34500

拆分:

  0011 0100 0110 0000 0000   第4位.第五位都是0.

索引我们要根据位来看看到底是什么表.

五丶32位表项.

从上面我们得知了第一种表现.是4KB的表项做法.每一个都是1024项的.

4kb表项

也就是我们上图做的.查表的是否根据上图去查表的.

4MB的页

这个就很简单了.发现了没有.上面少了一个页表. 我们从PDE中查表的时候.查出来直接就是物理地址了.

而且虚拟地址的偏移是22位了.所以最后我们加的是前10位.

而且下图也有说.

还把各种标志位的作用都说了.

查表方法同上面一样. 只不过最后加偏移的是否是 从PDE表中的所在物理地址的位置取出10位.然后加上我们的偏移即可.

例如我们从上面随便找个PDE的表

假设 PDE中的0003b163是物理地址.我们只需要取出前10位.然后加上我们的偏移即可.

0000 0000 00 + offset = 物理地址.

六丶开启PAE,36位表项.

在我们可以映射4G内存的是否. 内存发展速度大于CPU.此时已经8G内存了.如果访问

此时CPU厂家.就加了4根地址总线.以支持8G的访问.

而因为为了支持.所以表项变成了512个项了. 每一项8个字节了.

36位下4KB的分页

根据上图,我们可以看出.加了一个新表.

我们的虚拟地址索引的高2位要做为这个 新表的索引去查询.

最后我们的12位偏移,要加上PTE中物理地址的24位才是我们的物理内存的位置.

而这种做表方法.只能说也是映射4G内存.只不过可以映射多个4G内存了.

查表方法和上面一样.

首先字节改变了. 每一项8个字节,而后最后我们是12位加上24位.得出物理地址.

36位下2MB的分页

也是同上.只不过少了一个PTE.查表动作少了一次而已.

.只不过计算的是否.要根据36位地址来计算.

看下图.

2MB的

第一张图,告诉了我们.我们进行查表的时候. 4KB的怎么加.

例如:

  我们以前查表是  !dd 3f000000 ,正好32位.而看上图.4KB的告诉了我们.

32位 - 35位当作基址查询.(4位) 要加上. 比如 !dd 00003f000000 正好满足36的地址进行查寻.

2MB的图是一样的.

七丶64位系统下的表项

64位CPU下的的表项.同32为系统的表项是一样的. 只不过变的更大了.

4kb的表项

和32位下一样.加了几张表.各种位都变大了.

2MB的分页

64位扩展的2MB分页

64位下映射1GB的图

CR3. 当我们3环调用0环回调的是否.CR3是ring3的.

八丶为什么学习这些表.以及学这些表的作用

为什么学习. 因为到了0环.就是对抗了. 就比谁对操作系统了解.

比如我们熟悉上面的这些表的设计. 而且根据GDT,找出线性地址.根据线性地址找出对应的物理地址.

那么我们完全可以进行手动操作物理内存. 实现ReadProcessMemory和WriteProcessMemeory.

当然不会怎么简单.但是我们能操作内存了. 是不是就不用调用API了.我们自己实现了 内存读写功能.

举例子:

  假设游戏有保护.保护了API. 不让你读写内存. 给你HOOK了.各种检测. 但是我们不调用. 我们自己写一个.它怎么检测.

转载于:https://www.cnblogs.com/iBinary/p/8315085.html

内核知识第九讲,32位下的分页管理,36位下的分页管理.以及64位下的分页管理相关推荐

  1. 微信计算机内存是32位吗?,真的比旧版更加顺滑流畅?微信64位版体验

    微信一直都是国民沟通工具的存在,很多人对微信的新功能倒背如流,却很少有人注意过它的版本.近日微信在其官网悄悄上线了一个64位测试版(安卓),版本号为最新的7.0.9.那么和我们平时所用的32位版相比, ...

  2. devc++64位不兼容_DNF玩家遭强制脱坑,只因64位更新后无法上游戏,如何解决?...

    DNF就在8月20更新了64位的客户端,对于此次从32位客户端升级至64位客户端,其实策划早在一个月之前就对玩家告知了,得知了更新之后会减少卡顿,掉线,C++报错的现象,玩家也是非常期待64位客户端的 ...

  3. linux 32位中文版,topogun linux|TOPOGUN For linux v2.0.13647中文免费版 64位/32位 - 121下载站...

    topogun是一款独立跨平台的拓补软件,软件可以兼容win.mac.linux等操作系统,小编为大家带来的这个是topogun 2.0 linux版本,适用于32位.64位操作系统,软件拥有强大的友 ...

  4. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...

    第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...

  5. LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8

    标签: 第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署  2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elastic ...

  6. sql server 64位导入数据源中没有excel_【超级软件】PDFXEdit7Portable x32/64位

    平时工作和学习中我们为了保证格式不变化,常常会把文件转换为PDF格式. 可文件转换为PDF格式之后,就难以修改,再从PDF导出为其他格式,比如PPT,Word,常常都会出现格式的错乱. 之前也曾给大家 ...

  7. windows下使用MingW-w64 编译 Qt4.8.6源码,生成64位QT库

    1. 安装mingw-w64 具体安装教程,可以参考:https://blog.csdn.net/wo198711203217/article/details/105032057 安装时记得选择x86 ...

  8. java access 2013_jdk1.8环境下的java如何直连接microsoft access2013(都是64位系统也是)...

    展开全部 工具: Access数据库 方法如下:控制面板->系统安全->管理工具->数据源e69da5e887aa3231313335323631343130323136353331 ...

  9. win7 64位运行不了服务器,G6-e标准包可以装在win7 64位系统上吗?现在提示不能登陆到服务器...

    用友通普及版安装说明一.安装前注意问题 为确保系统安装成功,请注意以下问题: 1.安装时操作系统所在的磁盘分区剩余磁盘空间应大于500MB,用友T3软件所安装在目标磁盘空间应大于2GB. 2.安装产品 ...

最新文章

  1. CCNP路由实验---3、人工汇总EIGRP路由
  2. Js实现回车登录,监听回车事件
  3. Spring学习(8)--- @Autowired注解(一)
  4. Entity Framework 代码模板
  5. java集合的批量新建_java使用Arrays.asList快速创建List集合
  6. 2011年 CIO简历该怎么写?
  7. OpenGL中的二维编程——从简单的矩形开始
  8. 【转】关于CLR内存管理一些深层次的讨论[下篇]
  9. 1036 跟奥巴马一起编程(15 分)
  10. 重新学习c++--理解引用、智能指针、虚函数、模板、容器
  11. 【翻译】在backtrack5上用Evilgrade工具15步**windows
  12. 2.FactoryMethod-工厂方法模式
  13. [恢]hdu 2143
  14. 上海自考计算机及应用,上海交通大学--计算机及应用(独立本科080901)
  15. python3.4编程,麻瓜编程·python实战·4-3自学:给4-2作业换新界面
  16. 药物临床试验数据递交FDA的规定
  17. android 4.4 一键root,手动一键root nexus 4 android 4.4
  18. 图片实现裁剪功能vue-img-cutter
  19. 信息系统项目管理师必背核心考点(六十二)项目组合治理主要过程
  20. vue 百度地图获取经纬度地址

热门文章

  1. cordova 发布 android release 签名打包
  2. 获取服务器配置信息的方法
  3. PHP网站安装程序的原理及代码
  4. safe_mode 开启后linux下影响
  5. apache 不解释php,apache-2.2 – Apache不解释.PHP文件
  6. 最近有不少网友给我的书提出了问题,并要求尽快出版第二版
  7. exit函数的头文件问题
  8. 【正一专栏】警察叔叔,我还是只是一个婴儿
  9. 模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇
  10. CTFshow 反序列化 web277