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

前端之家收集整理的这篇文章主要介绍了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函数.

猜你在找的C#相关文章