Windows保护模式学习笔记(六)—— 10-10-12分页

  • 基本概念
    • 4GB内存空间
    • 有效地址-线性地址-物理地址
      • 有效地址与线性地址
      • 物理地址
    • 控制寄存器:Cr3
  • 10-10-12分页
    • 实验:通过线性地址找到物理地址
      • 第一步:将XP虚拟机设置为10-10-12分页模式
      • 第二步:新建一个记事本,写入"Hello World"
      • 第三步:使用Cheat Engine附加进程
      • 第四步:找到"Hello World"的线性地址
      • 第五步:将线性地址拆分为10-10-12三组比特组
      • 第六步:获得进程的Cr3
      • 第七步:通过Cr3找到字符串的物理地址
        • 第一层
        • 第二层
        • 第三层

基本概念

4GB内存空间

大家可能都听说过,每个程序在运行时,操作系统都会为其分配一段4GB的内存空间

但是我们的内存容量很可能最多只够为一个进程分配4GB的内存空间,如何做到为每个进程都分配呢?

实际上,进程被分配到的“4GB内存空间”只是虚拟的的内存空间,并不是指真正意义上的物理内存,虚拟内存与物理内存之间有一层转换关系

有效地址-线性地址-物理地址

有效地址与线性地址

先看如下指令:
MOV eax,dword ptr ds:[0x12345678]

其中,0x12345678 是有效地址
ds.Base + 0x12345678 是线性地址

注意:当段寄存器的Base为0时,有效地址=线性地址,大多数时候都是如此;但也有特殊情况,比如fs段寄存器的Base不为0

物理地址

描述:

我们平时所用到的系统DLL(动态链接库)存在于物理地址中,当程序想要调用某个DLL时,DLL便会映射一份线性地址给程序,这样程序就能够通过线性地址找到DLL的物理地址

控制寄存器:Cr3

描述:

每个进程都有一个Cr3(准确的说是都有一个Cr3的值,Cr3本身是个寄存器,一个核,只有一套寄存器)
Cr3指向一个物理页,一共4096字节
有关Cr3结构部分将在下一篇详细说明,这里只引入基本概念(实验需要)

10-10-12分页

实验:通过线性地址找到物理地址

第一步:将XP虚拟机设置为10-10-12分页模式

右键→我的电脑→属性→高级


将noexecute改为execute,保存,重启即可

第二步:新建一个记事本,写入"Hello World"

第三步:使用Cheat Engine附加进程

第四步:找到"Hello World"的线性地址


搜索字符串的时候别忘了勾上Unicode

可以看到左边出现了两个结果,我们可以在记事本中将最后的字符’d’改成’m’来确认哪个才是真正的线性地址

线性地址最终确定为:06765140

第五步:将线性地址拆分为10-10-12三组比特组

0    6    7    6    5    140
=
0000 0110 0111 0110 0101 140
=
0000011001      // 0x19
1101100101      // 0x365
140             // 12个比特位刚好三个字节

第六步:获得进程的Cr3

在WinDbg中输入命令:!process 0 0

DirBase的值就是Cr3

第七步:通过Cr3找到字符串的物理地址

注意

  1. 找第一层和第二层的时候要将索引* 4(每个地址占4个字节)
  2. 每找到一层都要将地址后三位属性位清零再继续找下一层
第一层

第二层

第三层


使用db命令以字符形式查看

实验成功!

Windows保护模式学习笔记(六)—— 10-10-12分页相关推荐

  1. Windows保护模式学习笔记(九)—— 2-9-9-12分页

    Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...

  2. Windows保护模式学习笔记(十)—— TLB

    Windows保护模式学习笔记(十)-- TLB 地址解析 10-10-12分页 2-9-9-12分页 TLB TLB结构 TLB种类 练习1:体验TLB的存在 第一步:运行代码 第二步:设置中断门描 ...

  3. Windows保护模式学习笔记(七)—— PDEPTE

    Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...

  4. Windows保护模式学习笔记(一)—— 段寄存器GDT表

    Windows保护模式学习笔记(一)-- 段寄存器&GDT表 保护模式 参考书籍: 一.段寄存器 段寄存器的结构 段寄存器的读写 段寄存器的属性 1)探测Attribute: 2)探测Base ...

  5. Windows保护模式学习笔记(十四)—— 阶段测试

    Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...

  6. Windows保护模式学习笔记(十三)—— PWTPCD

    Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...

  7. Windows保护模式学习笔记(十二)—— 控制寄存器

    Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...

  8. Windows保护模式学习笔记(八)—— 页目录表基址/页表基址

    Windows保护模式学习笔记(八)-- 页目录表基址/页表基址 要点回顾 一.页目录表基址 实验:拆分线性地址C0300000,并查看其对应的物理页 第一步:打开一个进程,获得它的Cr3 第二步:查 ...

  9. Windows保护模式学习笔记(五)—— 任务段任务门

    Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...

最新文章

  1. Linux下遍历指定目录的C++实现
  2. 配对MPLS和SD-WAN是一个双赢的方案
  3. 白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系
  4. C++ 3 基本数据类型
  5. linux下find查找带有指定权限的文件(windows下编译的源代码文件)
  6. linux sata raid,linux – 两个SIL RAID卡的SATA驱动器问题
  7. element-ui 解决 table 里包含表单验证的问题!
  8. python爬虫大作业爬多少数据_爬虫大作业
  9. PL/SQL学习笔记之存储过程
  10. .fit文件读取--head信息--修改head--读取csv文件-------ska暑期训练
  11. c语言time函数详解,C语言Time函数
  12. css 单行space-between左右布局,左边元素文字过长显示省略号
  13. 【js】三种JS截取字符串方法
  14. Typora+MarkDown
  15. 基于Matlab-采用张正友标定法对双目相机进行标定
  16. Nginx配置详解/代理服务的配置说明
  17. 用google协作平台6步轻松建立免费个人网站
  18. 实用的Dock栏快速启动工具:uDock for Mac
  19. tomat服务器启动startup.bat程序,解决dos窗口中文乱码问题
  20. 半路出家学习Java

热门文章

  1. ML之RFXGBoost:分别基于RF随机森林、XGBoost算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还)
  2. 成功解决sklearn\grid_search.py:42: DeprecationWarning: This module was deprecated in version 0.18 in fav
  3. Dataset:数据集集合(CV方向数据集)-常见的计算机视觉图像数据集大集合包括表面缺陷检测数据集(持续更新)
  4. auto-sklearn案例解析一
  5. OpenJudge 1.7 09:密码翻译 题解
  6. AsyncDisplayKit
  7. leetcode Number of 1 Bits
  8. struts2-ognl 访问静态方法
  9. 【struts2】名为dispatcher的ResultType
  10. 【Leafletjs】4.L.Map 中文API