【发布时间】:2015-12-16 22:33:52
【问题描述】:
我正在使用 ReadProcessMemory 从我创建的进程中读取单个字节。 由于我作为调试器附加,我正在读取现在(或不久之前)正在执行的地址。
但我通过 GetLastError() 仅在某些地址上收到 ReadProcessMemory 的 299 错误(有些工作正常..)
在出现错误的情况下,我调用 VirtualQueryEx,memInfo 保护为 0x1,而 type 和 baseAddress 为 0x0(但区域大小是一些正常数字),VirtualQueryEx 也没有失败..
如果我为这些情况调用 VirtualProtectEx,我会收到错误 487(尝试访问无效地址)。
我想可能是我尝试读取的地址被分页了,因此出现了所有错误,但它似乎不对,因为正如我已经提到的,它是最近执行的地址。
有什么想法吗?
【问题讨论】:
-
你的地址好像写错了,你是怎么确定的?
MEMORY_BASIC_INFORMATION->State的值是多少? -
除非你挂起目标进程中的所有线程,否则分配的内存是一个移动的目标,试图访问它需要运气。我不知道您为什么认为无法通过
ReadProcessMemory访问分页内存。 -
我附加了一个调试器,并且在每一步异常中,我都会读取从异常中获得的内存地址。 MEMORY_BASIC_INFORMATION->State 是 0x00010000。此外,由于我正在处理调试异常,因此线程被暂停..
-
0x10000 表示地址未分配。如果被调试的进程进入了未分配的内存,那就意味着它崩溃了。
-
但它没有崩溃 :( 所以我不知道为什么它没有被分配(据称)。当我没有收到这个错误时,一切正常并按预期.. .