【发布时间】:2016-01-30 23:07:37
【问题描述】:
程序使用ReadProcessMemory 扫描内存块以查找特定值。不幸的是,当我致电 ReadProcessMemory 时,我收到错误 299。
void update_memblock(MEMBLOCK *mb)
{
//variables
static unsigned char tempbuf[128*1024];
size_t bytes_left;
size_t total_read;
size_t bytes_to_read;
size_t bytes_read;
size_t sizeMem;
size_t MemoryBase;
bytes_left = mb->size;
total_read = 0;
while (bytes_left)
{
bytes_to_read = (bytes_left > sizeof(tempbuf)) ? sizeof(tempbuf) : bytes_left;
ReadProcessMemory(mb->hProc ,mb->addr + total_read,mb->buffer, bytes_to_read, (SIZE_T*)&bytes_read);
if (bytes_read != bytes_to_read)break;
memcpy(mb->buffer + total_read, tempbuf,bytes_read);
bytes_left -= bytes_read;
total_read += bytes_read;
}
mb->size = total_read;
}
【问题讨论】:
-
“仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分。” -msdn.microsoft.com/en-us/library/windows/desktop/…
-
你需要使用VirtualProtect来保证所有内存都是可写的。
-
@xboi209:他在阅读,而不是在写作。 (很可能他遇到了未分配的地址空间部分。)
-
为什么要将数据读入
tempbuf并复制到mb->buffer而不是直接读入mb->buffer? -
当它到达连续分配之间的边界时它可能会停止。 (文档没有说明这一点,但这似乎是合理的做法。)收到错误后,
bytes_read是什么?如果您继续并从新地址发出另一次读取,该读取是否有效?如果没有,你会得到什么错误?
标签: c++ windows readprocessmemory