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内存管理方面的博文,但是文章大多 ...
随机推荐
- SSL的单向认证和双向认证
原文地址:http://alvinhu.com/blog/2013/06/20/one-way-and-two-way-ssl-authentication/?utm_source=tuicool&a ...
- 基于HTML5堆木头游戏
今天要来分享一款很经典的HTML5游戏——堆木头游戏,这款游戏的玩法是将木头堆积起来,多出的部分将被切除,直到下一根木头无法堆放为止.这款HTML5游戏的难点在于待堆放的木头是移动的,因此需要你很好的 ...
- call_usermodehelper内核中运行用户应用程序
init是用户空间第一个程序,在调用init前程序都运行在内核态,之后运行init时程序运行到用户态. 操作系统上,一些内核线程在内核态运行,它们永远不会进入用户态.它们也根本没有用户态的内存空间.它 ...
- API - 使用Default对象 - 基础篇
在编写Spider Studio脚本时, Default对象是最常用最重要的一个, 其类型定义如下: Webus3.Spider.Controls.JQueryBrowser Default; 下面介 ...
- 使用pjsip传输已经编码的视频
http://blog.chinaunix.net/uid-15063109-id-4445165.html ————————————————————————————————————————————— ...
- Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。
Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...
- LoadRunner中的异常处理
在脚本的Run-time Settings中,可以设置在脚本运行过程中发生错误的处理方式.进入到Run-time Settings中,切换到Miscellaneous标签页,可以看到Error Han ...
- Tomcat6连接数设置:permsize
Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64) TOMCAT_HOME/bin/catalina.sh 添加一行:JAVA_OPTS ...
- ResNet 结构理解
博客来源于:https://blog.csdn.net/buyi_shizi/article/details/53336192:https://blog.csdn.net/dcrmg/article/ ...
- Python 使用正则表达式匹配IP信息
使用正则表达式匹配IP地址 .MAC地址 .网卡名称: #!/usr/bin/env python #-*- coding:utf-8 -*- import re from subprocess im ...