10_PAE_非PAE
前置知识:
在 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地址:
获取测试进程的cr3
> !process 0 0 // 获取当前进程列表,找到测试进程的 dirbase = cr3
解析虚拟地址 0x403018
> .formats 0x403018 // 查看二进制
然后手动分解 pdpte pde pte offset :
---// 00 000000010 000000011 000000011000
---// 0 2 3 18
结合windbg 找对应的物理地址:
找 pdpte 中的项 pde 的地址
cr3 + 8*0
找 pde 中的项 pte 的地址
pde + 2*8
找 pte 中 页的地址
pte + 3*8
页的 地址 + offset 即 是 目标物理地址
p + 18
如图:
/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的更多相关文章
- x86平台上的Windows页表映射机制
首先,在x86架构的处理器上,一个正常页面大小为4KB,非PAE模式下,CR3持有页目录页面的物理地址,PDE和PTE格式相同大小为4字节.此时每个页表页面包含1024个PTE,可以映射1024个页面 ...
- 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
1.Xen.KVM.VMware.hyper-v等虚拟化技术的比较,xen和kvm,是开源免费的虚拟化软件. vmware是付费的虚拟化软件. hyper-v比较特别,是微软windows 2008 ...
- Linux分页机制之概述--Linux内存管理(六)
1 分页机制 在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address). 很显然,这个页表是需要常驻内 ...
- [转帖]Linux分页机制之概述--Linux内存管理(六)
Linux分页机制之概述--Linux内存管理(六) 2016年09月01日 19:46:08 JeanCheng 阅读数:5491 标签: linuxkernel内存管理分页架构更多 个人分类: ┈ ...
- Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 ...
- Linux内核调试方法【转】
转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...
- Linux-3.14.12内存管理笔记【建立内核页表(3)
前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_ran ...
- 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)
doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...
- Spring源码分析:非懒加载的单例Bean初始化过程(下)
上文Spring源码分析:非懒加载的单例Bean初始化过程(上),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireC ...
随机推荐
- 24-python基础-python3-浅拷贝与深拷贝(2)
4.copy 模块的 copy()和 deepcopy()函数 在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表或字典,可能不希望这些变动影响原来的列表或字典.要做到 ...
- js canvas 粒子动画 电子表
前言 从我接触canvas的第一天就觉得canvas很有趣,想搞点事情,这几天终于忍不住了,于是他来了. 先看效果 这里我做了四个大家有兴趣可以看完文章, ...
- Centos7系统安装笔记
Centos 7安装步骤 对应参数,可修改 1.一台主机对应一个服务器,需要先安装Centos 7(内网)2.F12 boot 进入boot模式3.选择安装方式:USE或其他4.根据底部文字提示,点击 ...
- kubernetes报错
错误信息:执行yaml文件后,服务在运行,但是提示命令找不到 原因:没有环境,相当于只有一个快捷方式 环境目录为/usr/local/bin 解决办法:将/etc/ansible/bin下的文件都拷贝 ...
- js取整 - 优雅版(装逼必备)
var a = 2.98; var z1 = ~~a; var z2 = a | 0; var z3 = a>>0; console.log(z1, z2, z3); // 2, ...
- 使用Git实现Laravel项目的自动化部署
简介 不知道大家一开始是怎么使用 git 进行开发的,反正我个人是先将代码提交到 github 仓库,然后用 SSH 登录到服务器,然后进行克隆或者版本更新.听起来就很麻烦,当然实际操作中也很麻烦,那 ...
- 【JZOJ1914】【BZOJ2125】最短路
description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. analysis 建出圆方树后,可以知道仙人掌上每一个方点连着的边双其实就是 ...
- java 多上传 CommonsMultipartFile[] files
/** * 视频上传 * ddl * @param request * @param response * @param files * @return * @throws Exception */@ ...
- luoguP3690 【模板】Link Cut Tree (动态树)[LCT]
题目背景 动态树 题目描述 给定N个点以及每个点的权值,要你处理接下来的M个操作.操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor ...
- CF 600E. Lomsat gelral(dsu on tree)
解题思路 \(dsu\) \(on\) \(tree\)的模板题.暴力而优雅的算法,轻儿子的信息暴力清空,重儿子的信息保留,时间复杂度\(O(nlogn)\) 代码 #include<iostr ...