加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:36:31 所属栏目:百科 来源:网络整理
导读:最近我组装了一个C#类,可以使用API??调用等来读取和写入另一个进程内存中的字节,因为我确信你以前都看过. 然而,我的问题涉及到如何有效扫描另一个进程的记忆?我知道测试每组4个字节的基本方法,直到您达到Int32.MaxValue,但是我发现它是(可想而知)令人难以置
最近我组装了一个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函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读