c# – 有效扫描进程的内存

最近我组装了一个C#类,可以使用API​​调用等来读取和写入另一个进程内存中的字节,因为我确信你以前都看过.

然而,我的问题涉及到如何有效扫描另一个进程的记忆?我知道测试每组4个字节的基本方法,直到您达到Int32.MaxValue,但是我发现它是(可想而知)令人难以置信的时间和资源消耗.

从我所看到的,通过执行“HeapWalk”,可以确定进程的分配地址.任何人都可以向我提供一些代码示例和/或有关这方面的信息,什么是最好的方式呢?

解决方法

您正在寻找的是内存区域列表,它基本上是一对内存地址/区域大小的列表.

你必须做的是:

>使用OpenProcess的进程ID(PID)获取目标进程的句柄
>调用VirtualQueryEx功能,直到到达内存空间的末尾(即方法的结果大于0)
关闭你打开的进程句柄

使用lpAddress启动VirtualQueryEx为0x0.这将返回一个包含BaseAddress和RegionSize属性的MEMORY_BASIC_informatION结构(这表示可以读取的内存空间).然后使用RegionSize值增加lpadress参数,因此下一次调用VirtualQueryEx将返回下一个区域…等.

Google OpenProcess,CloseHandle,VirtualQueryEx和MEMORY_BASIC_informatION,因此您可以找到要使用的不同的P / Invoke声明,因此您可以从C#调用这些Win32函数.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...