windbg遍历进程页表查看内存
2016-12-09
近期想查看下系统分配了的页的页表项的标志位,但是发现资料较少,所以还是记录下,希望可以对某些朋友有所帮助!
系统:win7 32位虚拟机
平台:KVM虚拟化平台
win7 32位默认是开启了PAE分页模式的,PAE分页模式本质上和普通的32位分页并无区别,只是页表结构和虚拟地址的划分有所不同,这点就不单独讲述,感兴趣可参考另一篇博文:PAE 分页模式详解
首先写了一件简单的内核NT驱动,分配了一个页的内存,然后写入数据0xa1b2c3d4
加载驱动:

看到申请的内存的地址是0x85d55000,我们直接看下这块内存:

确实是我们写入的数据,然后开始查看页表,首先获取的是页表基地址,我们通过当前进程查看:

可以看到页基址是7ee47400,这正是当前CR3寄存器保存的页基址,该地址指向一个页目录指针表(page-directory-pointer-table),需要注意的是该表一共有4个表项,每个表项八个字节,并且在PAE模式下,地址转换不直接使用CR3寄存器,而是第一级的页目录指针分配了四个PDPTE寄存器,每个保存一个页目录指针,但是也目录指针寄存器的值却是来源于CR3指向的页目录指针表。所以我们仍然可以直接利用CR3来寻址。
我们先分解下目标虚拟地址:
按照 结构分成四部分:10 000101110 101010101 000000000000,对应16进制:0x2 0x2e 0x155 0x0
查看7ee47400内容,由于表项是8字节,所以使用dq(大小端模式问题)

根据虚拟地址,知道该地址对应表中第三项,即图中标记的表项,取物理页框号+偏移得:4595b000+0x2e*8=4595b170
查看该地址:

对应的表项内容为05e07863,同样取物理页框号+偏移得:05e07000+0x155*8=05e07aa8
查看地址内容:

得到表项内容为7fe95963 ,这个就是这个就是最终的PTE了,即指向一个4KB 页面,物理页框号为7fe95000,而由于我们是申请的就是一个页,即页内偏移为0,所以这里同样也是我们虚拟地址对应的物理地址
查看内容:
至此,整个查表过程就完成了。
windbg遍历进程页表查看内存的更多相关文章
- linux下对进程按照内存使用情况进行排序
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
- 利用windbg探索进程和进程上下文
1.列出所有活动进程 使用!process命令可以打印出活动进程的信息.第一个参数是要打印的EPROCESS的地址,如果指定为0则表示打印所有的进程.第二个参数用于说明打印进程信息的详细级别.指定0则 ...
- HBase 学习笔记---守护进程及内存调优
1.HMaster HMaster的任务前面已经说过了,两个大方向:一.管理Hbase Table的 DDL操作 二.region的分配工作,任务不是很艰巨,但是如果采用默认自动s ...
- 进程与线程(二) java进程的内存模型
从我出生那天起,我就知道我有个兄弟,他桀骜不驯,但实力强悍 ,人家都叫它C+++ ----java 上回说到了,C进程的内存分配,那么一个java运行过程也是一个进程,java内 ...
- .NET(C#):获取进程的内存私有工作集
当前.NET Framework(.NET 4.0)的Process仅提供进程的内存工作集的获取(通过WorkingSet64属性),而没有提供对私有工作集的获取.注意在Windows Vista之后 ...
- 通过WriteProcessMemory改写进程的内存
http://www.cnblogs.com/feiyucq/archive/2009/10/21/1587628.html 以PROCESS_ALL_ACCESS权限打开进程以后既能够使用ReadP ...
- VC中遍历进程并获取进程信息
代码如下: /***************************************************/ /* 函数: 遍历进程信息 /* 参数:进程名称 例如: aaa.exe /* ...
- Windows中进程的内存结构
基础知识: 栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表.允许插入或删除操作的一端称为栈顶,另一端称为栈底,对栈的插入和删除操作被称为入栈和出栈. 有一组CPU指令可以实现对进程 ...
- Android进程的内存管理分析
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...
随机推荐
- EF调用存储过程、函数
一.ef4.1 codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题 说这个问题前 首先先说下 我使用ef4.1 codefirst的目的. 是因为可 ...
- RabbitMQ之任务队列【译】
在第一个教程里面,我们写了一个程序从一个有名字的队列中发送和接收消息,在这里我们将要创建一个分发耗时任务给多个worker的任务队列. 任务队列核心思想就是避免执行一个资源密集型的任务,而程序要等待其 ...
- QQ会员活动运营平台架构设计实践——高效自动化运营
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.在过去四年的时间里,AMS日请求量从200-500万的阶段,一直增长到日请求3-5亿,最高CGI日请 ...
- mvc 返回list数据 页面 mode
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<实体命名空间& ...
- SQL Server,MySql,Oracle数据库的默认端口号
SQL Server默认端口号为:1433 MySQL 默认端口号为:3306 Oracle 默认端口号为:1521
- php 显示一个干净的,易被解析的json
header("Content-type: text/html; charset=utf-8"); //试着从数据库里读取一条数据放进来 $con = mysql_connect( ...
- javascript -- 阻止默认事件 阻止事件冒泡
1. event.preventDefault(); -- 阻止元素的默认事件.注:a元素的点击跳转的默认事件 , button,radio等表单元素的默认事件 , div 元素没有默认事件 例: ...
- php -- memcached 内存缓存
一.memcached 简介 在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高 ...
- jQuery 插件开发指南
jQuery凭借其简洁的API,对DOM强大的操控性,易扩展性越来越受到web开发人员的喜爱,经常有人询问一些技巧,因此干脆写这么一篇文章给各位jQuery爱好者,算是抛砖引玉吧. 那么首先我们来简单 ...
- MathType中有几种不同的省略号
省略号是一个使用很广泛的符号,这个符号在很多方面都有应用,它一般表示列举的意思.文科方面的省略号跟数理中的省略号使用时有一些区别,前者是6个点,而后者只要3个点.当在用MathType数学公式编辑器时 ...