gpt4 book ai didi

c++ - ReadProcessMemory _out_ bytesread

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:27 24 4
gpt4 key购买 nike

该程序使用 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;
}

最佳答案

错误代码 299 (0x12B) ERROR_PARTIAL_COPY“只完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分”

您收到此错误是因为您试图从未“分配”的页面读取内存。

您想使用 VirtualQueryEx()在产生 MEMORY_BASIC_INFORMATION 的每一页内存上结构,其中包含 2 个注意的变量:

状态:可以是 MEM_COMMIT、MEM_FREE 或 MEM_RESERVE保护:可以是 Memory Protection Constants 中的任何一个

您想遍历所有内存页,对它们调用 VirtualQueryEx() 并跳过任何坏页。我喜欢跳过状态为 != MEM_COMMIT 和 Protect == PAGE_NOACCESS 的所有页面/区域

这是一个伪代码示例:

MEMORY_BASIC_INFORMATION mbi = { 0 };

while (LoopingThroughTheMemories.bat)
{
if (!VirtualQueryEx(hProc, currentMemoryAddress, &mbi, sizeof(mbi))) continue
if (mbi.State != MEM_COMMIT || mbi.Protect == PAGE_NOACCESS) continue;

//good mem region, do ReadProcessMemory() stuffs
}

关于c++ - ReadProcessMemory _out_ bytesread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com