首页
社区
课程
招聘
[求助]请问,window c/c++如何获取某一时刻整个物理内存中的数据?
发表于: 2016-1-18 22:39 6837

[求助]请问,window c/c++如何获取某一时刻整个物理内存中的数据?

2016-1-18 22:39
6837
试过的方法:
1、使用MmMapIoSpace,将物理内存地址映射成虚拟内存地址,然后访问虚拟内存地址。但是这种方法在访问某些物理地址的时候会使系统崩溃,猜测是因为访问了没有挂载的物理地址。
2、试图遍历虚拟内存空间,这样就需要有一个函数可以探测遍历的当前虚拟内存是否可读,但是没有找到这样的函数。只找到ProbeForRead,该函数只能在内核态判断某一用户态的虚拟内存是否可读,不能用户内核态虚拟地址的判断。并且在64位系统下虚拟地址空间非常大,遍历也不太现实。
3、window系统的睡眠功能的实现是将点击睡眠按钮后的物理内存以及cpu状态信息保存在hiberfil.sys系统文件中,唤醒的时候从hiberfil.sys中恢复出物理内存,和cpu状态。猜测window应该是调用一系列的底层函数,或者undocument函数来完成该功能的,但是在网上没有找到实现方式和原理。

上面三个方法都没走通。。。

请问各路大神有没有什么办法能获取整个物理内存的数据呢?

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 129
活跃值: (358)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xed
2
cheatengine
Ce源码应该有吧。
2016-1-19 02:59
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
驱动占用的内存,所有进程是一样的,位于0x80000000以上,0x7fffffff以下的地址空间,每个进程分别使用各自的虚拟内存,你需要遍历所有的进程,拷贝出每个进程的0x7fffffff以下的空间,然后再拷贝一份0x80000000以上的空间就可以了。
2016-1-19 08:26
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
cheat engine的源码是delphi的吧,ce的原理应该和3楼说的类似,遍历所有进程,逐个进程访问内存。谢谢~
2016-1-19 09:44
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢啦~也考虑过这种方法,我想做得是对比两个时刻,同一物理内存地址上的数据是否改变。采取的办法就是两个时刻分别获取所有物理内存的信息,然后对比。你说的方法,逐个进程读内存可以获取此刻所有使用的内存,但是无法逐一对比。并且进程的同一虚拟地址在不同时刻是可能映射到不同的物理地址上去的吧。
2016-1-19 09:50
0
雪    币: 100
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
可以逆ntldr保护模式osload里面有hibernation还原代码
2016-9-18 16:37
0
游客
登录 | 注册 方可回帖
返回