前置知识:

在 windows 中 保护模式 有两种模式: 段保护 和 页保护

段保护 主要体现在 段选择子上;但是数据段、代码段、栈段等采用的都是4GB平坦模式,段的特征并没有那样展现。所以具体的保护机制 采用的是页保护。

PAE和 非PAE:

页保护 有两种:

  • 非 PAE

  • PAE

开启 PAE:

在 boot.ini 中 设置:为 noexcute -- 即不可执行 ;激活 DEP 的功能 -在这个时候 使用的是 PAE(因为早期的非PAE 并不支持数据执行保护);

选择 为 execute -optin 后 这里的 数据执行保护 是灰色的 根本就不能设置。这时候 就是 非 PAE 模式下。相反 就是 PAE 模式下。

图解 非 PAE:

图解 PAE:

注意: 内核地址中 专门有一块却与用来存放 pte表、pde 表的 非pae 是 4MB , pae 由于每项是8byte 所以变为 8MB;

这里 假设一个虚拟地址 0x403018 则:

手动模拟 解析 PAE地址:

  1. 获取测试进程的cr3

    > !process 0 0 // 获取当前进程列表,找到测试进程的 dirbase = cr3

  2. 解析虚拟地址 0x403018

    > .formats 0x403018 // 查看二进制

    然后手动分解 pdpte pde pte offset :

    ---// 00 000000010 000000011 000000011000

    ---// 0 2 3 18

  3. 结合windbg 找对应的物理地址:

    1. 找 pdpte 中的项 pde 的地址

      cr3 + 8*0

    2. 找 pde 中的项 pte 的地址

      pde + 2*8

    3. 找 pte 中 页的地址

      pte + 3*8

    4. 页的 地址 + offset 即 是 目标物理地址

      p + 18

  4. 如图:

/i 进程调度的时候 切换 进程到指定进程:

g 运行起来 激活 调度;以至于到目标进程的时候停下来

查看 当前进程 的 cr3

使用 db 查看这时候进程空间 虚拟地址 数据

使用 windbg 解析 虚拟地址对应的物理地址:

!vtop 有两个参数

第一个对应的是 cr3

第二个参数 是 对应进程的虚拟地址。

使用 !pte 0xaddr 查看对应addr 中的页属性(前提:必须切换到当前进程,cr3也需要切换到,即 !process 0 0; .process /i xxxxx;g;)

通过下面这两个公式 解析出所在的 pde 、pte

修改pte 属性,关闭dep

10_PAE_非PAE的更多相关文章

  1. x86平台上的Windows页表映射机制

    首先,在x86架构的处理器上,一个正常页面大小为4KB,非PAE模式下,CR3持有页目录页面的物理地址,PDE和PTE格式相同大小为4字节.此时每个页表页面包含1024个PTE,可以映射1024个页面 ...

  2. 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较

    1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...

  3. Linux分页机制之概述--Linux内存管理(六)

    1 分页机制 在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address). 很显然,这个页表是需要常驻内 ...

  4. [转帖]Linux分页机制之概述--Linux内存管理(六)

    Linux分页机制之概述--Linux内存管理(六) 2016年09月01日 19:46:08 JeanCheng 阅读数:5491 标签: linuxkernel内存管理分页架构更多 个人分类: ┈ ...

  5. Linux内核调试方法总结

    Linux内核调试方法总结 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2   ...

  6. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  7. Linux-3.14.12内存管理笔记【建立内核页表(3)

    前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_ran ...

  8. 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

    doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...

  9. Spring源码分析:非懒加载的单例Bean初始化过程(下)

    上文Spring源码分析:非懒加载的单例Bean初始化过程(上),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireC ...

随机推荐

  1. 逻辑回归原理,推导,sklearn应用

    目录 逻辑回归原理,推导,及sklearn中的使用 1 从线性回归过渡到逻辑回归 2 逻辑回归的损失函数 2.1 逻辑回归损失函数的推导 2.2 梯度下降法 2.3 正则化 3 用逻辑回归进行多分类 ...

  2. termcap - 终端功能数据库

    描述 DESCRIPTION termcap 数据库是一个过时 (obsolete) 工具,用来描述以字符为单位的终端和打印机的功能.它之所以被保留,是为了兼容古老的程序:新程序应当使用 termin ...

  3. svnserve - 使用 `svn' 访问仓库时的服务器

    SYNOPSIS 总览 svnserve [options] DESCRIPTION 描述 svnserve 允许使用 svn 网络协议访问 Subversion 仓库.它可以运行为独立的服务器进程, ...

  4. linux下nano命令大全

    nano是一个字符终端的文本编辑器,有点像DOS下的editor程序.它比vi/vim要简单得多,比较适合Linux初学者使用.某些Linux发行版的默认编辑器就是nano. nano命令可以打开指定 ...

  5. 【网页布局基础】css布局学习总结

    三种定位机制 1.标准文档流:从上到下,从左到右输出文档内容 2.浮动 3.绝对定位 需要注意的是块级元素如div p ul 等 行级元素如span strong img input等 块级元素与行级 ...

  6. PHP-在排序数组中查找元素的第一个和最后一个位置

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  7. PHP实现上传视频的功能

    首先前台HTML表单代码如下: <html> <head> <meta http-equiv="Content-Type" content=" ...

  8. SparkSQL(一)

    一.概述 组件 运行机制 转 SparkSQL – 从0到1认识Catalyst  https://blog.csdn.net/qq_36421826/article/details/81988157 ...

  9. EcShop二次开发学习方法和Ecshop二次开发必备基础

    ecshop二次开发学习方法 近年来,随着互联网的发展,电子商务也跟着一起成长,B2B,C2C,B2C的电子商务模式也不断的成熟.这时催生出了众多电子商务相关的php开源产品.B2C方面有Ecshop ...

  10. redis-config.properties属性资源文件

    redis.host=192.168.200.128redis.port=6379redis.pass=redis.database=0redis.maxIdle=300redis.maxWait=3 ...