最有效的方法来读取相邻地址的存储器?

时间:2012-06-28 22:27:55

标签: c# .net

我正在使用以下代码读取内存中的地址。在我看来,我可能做得非常低效,因为我正在为每个地址单独调用,尽管所有地址都是彼此相邻的(1个字节)。

    [DllImport("kernel32", EntryPoint = "ReadProcessMemory")]
    private static extern byte ReadProcessMemoryByte(int Handle, int Address, ref byte Value, int Size, ref int BytesRead);

该功能类似于:

pseudo: 
       For loop: 
       read memory address (base address offset)
       add result to array
       addressoffset++

所以说我有3个地址,我将进行3次单独的通话。有没有办法只进行一次调用然后执行内部逻辑将结果拆分为3个独立的数据段,如果你知道我的意思?不是逐字节读取,而是一次读取4个字节,然后在添加到数组之前拆分它们?

我问这个的原因是我的程序需要永远经历迭代,有时必须读取多达40,000个地址需要3分钟。如果我可以做我要问的事,那么也许我可以在一分钟内将其删除?

1 个答案:

答案 0 :(得分:2)

http://www.pinvoke.net/default.aspx/kernel32.readprocessmemory开始,方法签名应该是:

  [DllImport("kernel32.dll", SetLastError = true)]
  static extern bool ReadProcessMemory( 
    IntPtr hProcess, 
    IntPtr lpBaseAddress,
    [Out] byte[] lpBuffer, 
    int dwSize, 
    out int lpNumberOfBytesRead
   );

目前,由于byte / lpBuffer只有一个Value,因此您一次只能读取一个字节。您可以通过使byte[]并传递大于1的Size来读取更多(可能是您打算读取的所有字节,或分解为1024字节块)。