使用vb.net从另一个进程读取/写入内存

使用vb.net从另一个进程读取/写入内存,vb.net,process,ram,Vb.net,Process,Ram,我想访问分配给特定进程的虚拟内存(我有进程名,因此可以获得进程ID等)。理想情况下,我希望能够从中读取数据,识别模式(计算出我感兴趣的位在哪里),然后修改一些值并写入虚拟内存 这是可能的,有什么想法的MSDN网页可能会设置我在正确的道路上 只是想澄清一下,内存不是我的VB.NET应用程序的内存。这是一个独立的过程。这可能有点过头了,但如果您了解一点MASM汇编,您可以轻松创建一个可以直接读取内存的库,然后过滤结果。但是,对于您心目中的项目来说,这可能有点太多的工作。使用ASM汇编程序和反汇编程序

我想访问分配给特定进程的虚拟内存(我有进程名,因此可以获得进程ID等)。理想情况下,我希望能够从中读取数据,识别模式(计算出我感兴趣的位在哪里),然后修改一些值并写入虚拟内存

这是可能的,有什么想法的MSDN网页可能会设置我在正确的道路上


只是想澄清一下,内存不是我的VB.NET应用程序的内存。这是一个独立的过程。

这可能有点过头了,但如果您了解一点MASM汇编,您可以轻松创建一个可以直接读取内存的库,然后过滤结果。但是,对于您心目中的项目来说,这可能有点太多的工作。

使用ASM汇编程序和反汇编程序,并将库集成到您的应用程序中。

您说过您可以获得进程ID

然后,您需要使用获取流程的句柄

一旦有了句柄,就可以使用读取其他进程内存空间的块

但是,您需要知道您阅读的地址。如果您请求的区域实际上没有提交内存,那么函数将失败

另外,ReadProcessMemory的声明应该类似于

public declare unicode function ReadProcessMemory lib "kernel32" alias "ReadProcessMemory"(hProcess as IntPtr,lpBaseAddress as IntPtr,byref lpBuffer as byte(),dwSize as integer,byref lpNumberOfBytesRead as integer) as boolean

该声明假定执行读取的进程和正在读取的进程都是32位或64位,而不是每一位。TBH,我不知道它如何/是否能在不同的比特数下工作。

Google“vb.net readprocessmemory”。60000次点击应该就够了。@HansPassant谢谢,我马上就来!:这是非常特别的。你不会找到一个MSDN页面来覆盖它。