首页
社区
课程
招聘
[求助]关进程虚拟内存描述表
发表于: 2015-1-24 09:42 4493

[求助]关进程虚拟内存描述表

2015-1-24 09:42
4493
如图VMMap OD等软件工具都可以获得一张进程内虚拟内存描述表





如何用编程方式获得这张表?或提供一些思路。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
虚拟地址描述符VAD,是存放在用户空间还是内核空间?
2015-1-24 09:57
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
用户空间 解析加载的PE的PE头部获得表然后基址+相对地址 然后啪啪啪 这些系统DLL是   PEB的LDR链表
2015-1-24 10:17
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
解析LDR加载的DLL然后解析这些DLL的 PE头 最后加载地址+相对 然后啪啪啪出的这张所谓的表..
2015-1-24 10:20
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
以4KB为单位,从0地址开始,到用户态最高地址,调用VirtualQuery进行遍历,就可以得到这张表。
可用地址和页面属性都可以获取到。
模块相关的数据,需要ToolHelp32配合
2015-1-24 10:21
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
使用PE分析的方式无法分析出程序堆栈所在的内存
VirtualQuery进行遍历2GB用户空间需要循环20多万次,性能上可能存在问题,如果没有更好的办法我会遍历下试试。
另外我考虑这张表会不会就保存在2GB用户空间的某个位置 直接读出来就可以了。因为OD分析这张表的速度很快。
2015-1-24 10:33
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
你可以尝试逆一下。
2015-1-24 10:58
0
雪    币: 135
活跃值: (106)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
8
基本就是VirtualQuery遍历, 优化算法,很快的。VirtualQuery返回了内存区域大小,下次遍历直接就跳过这个区域了。
2015-1-24 11:08
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
读出来你也操作不了。麻烦死,直接VirtualQuery就可以了
2015-1-24 12:58
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
*************************
2015-1-24 13:28
0
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
坐等楼上禁言

进程VirtualQuery枚举下就有了!
2015-1-24 15:51
0
雪    币: 581
活跃值: (215)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
内核里,VAD只是作为一个虚拟地址空间的平衡二叉树上得一个节点。VirtualAlloc和VirtualAllocEx在分配虚拟内存时,虚拟内存管理器会用到它。
2015-1-24 16:25
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
13
VirtualQueryEX
2015-1-25 11:54
0
游客
登录 | 注册 方可回帖
返回
//