c# - 获取进程内存的图像

标签 c# readprocessmemory

我的目标是创建一个方法,该方法将获取进程句柄并返回表示该进程内存的字节数组。这是我拥有的:

    [DllImport("Kernel32.dll")]
    public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 nSize, ref UInt32 lpNumberOfBytesRead);

    public static byte[] MemRead(IntPtr handle, IntPtr address, UInt32 size, ref UInt32 bytes)
    {
        byte[] buffer = new byte[size];
        ReadProcessMemory(handle, address, buffer, size, ref bytes);
        return buffer;
    }

我不知道将什么作为参数传递给包装器方法。我可以找到一个 handle 并且 bytes 是一个输出变量,但是 addresssize 呢?我可以从哪里获取这些数据?

最佳答案

在调用 MemRead 之前,使用 VirtualQuery 查明地址是否已实际分配。 从零开始作为地址,64K 作为页面大小,然后在每次迭代中将指针递增 64K,直到达到系统上的最大内存大小。

关于c# - 获取进程内存的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6077182/

相关文章:

c++ - 64 位进程上的 ReadProcessMemory 总是返回错误 299

windows - 是否存在 ReadProcessMemory 失败的情况?

C++ ReadProcessMemory 收到 998/3E6 错误

c# - Nhibernate - 如何使用 CompositeId 设计域对象和映射

c# - 有没有办法强制异步/等待在第一个可用线程上继续?

c++ - 为什么将 ReadProcessMemory() 与当前进程的句柄一起使用?

python - 使用 ctypes 读取进程内存

c# - 如何最好地设计可扩展类?

c# - 使用初始值设定项创建对象数组似乎失败

c# - 补丁法线算法