【问题标题】:Why use ReadProcessMemory() with handle to current process?为什么将 ReadProcessMemory() 与当前进程的句柄一起使用?
【发布时间】:2017-02-08 10:30:22
【问题描述】:

使用NtQueryInformationProcess,可以通过读取返回的PROCESS_BASIC_INFORMATION类型结构中的PebBaseAddress字段来获取当前进程基地址。

我已经看到使用ReadProcessMemory() 来读取与当前进程的基地址相关的内存的代码,因为前几个字节包含一些显示详细进程信息的指针。我还需要获取其中的一些信息,research 向我展示了如何做到这一点。

但是,我仍然很困惑,为什么在从当前进程读取内存时需要ReadProcessMemory()。相对于进程基的指针不能被取消引用,还是会/可能导致分段错误?指针是否与进程基相关?

【问题讨论】:

  • 不需要。只需尝试即可轻松验证。
  • ReadProcessMemory 广泛用于读取其他进程的内存。在您的情况下,您可以使用指针
  • @HansPassant 简单地尝试并不能保证它在所有可能的情况下都会成功,因此问题。

标签: c++ windows readprocessmemory


【解决方案1】:

ReadProcessMemory 将为您检查您自己进程中的地址范围是否有效,并在出现问题时返回错误 (ERROR_PARTIAL_COPY) 而不是崩溃。

除此之外,我认为没有任何理由。如果您确定您的指针是正确的,则可以使用memcpy(而且速度更快)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多