gpt4 book ai didi

windows - 是否存在 ReadProcessMemory 失败的情况?

转载 作者:行者123 更新时间:2023-12-03 09:08:24 25 4
gpt4 key购买 nike

我目前正在编写一个使用 ReadProcessMemory 的程序将一 block 内存作为文本保存到文件中。在程序中,用户将指定内存块的基地址和大小。输入验证在调用 ReadProcessMemory 之前完成以确保没有与参数相关的错误。内存边界也仅限于预分配的区域,以确保用户不会尝试读取未分配的内存。由于所有分配的内存都是可读的,我认为不需要对 ReadProcessMemory 执行一般的调用后错误检查。 .我这样说正确吗?当然,假设所有参数都是有效的。我用过ReadProcessMemory过去多次进行适当的错误检查,发现它是不必要的,因为该功能总是成功的。

示例也将不胜感激。
提前致谢!

最佳答案

我假设所有参数都是有效的:

  • handlePROCESS_VM_READ访问过程;
  • lpBaseAddress已验证;
  • nSize <= lpBuffer 的大小.
  • ...

  • 我认为唯一会导致 ReadProcessMemory的因素失败是 Memory Protection属性。

    正如@IInspectable:“分配的内存并不意味着您可以读取它”。

    经过测试,我发现以下情况会失败。
  • PAGE_NOACCESS

  • https://docs.microsoft.com/en-us/windows/win32/memory/reserving-and-committing-memory
    lpvBase = VirtualAlloc(
    NULL, // System selects address
    PAGELIMIT*dwPageSize, // Size of allocation
    MEM_RESERVE, // Allocate reserved pages
    PAGE_NOACCESS); // Protection = no access
  • PAGE_GUARD | ...

  • https://docs.microsoft.com/en-us/windows/win32/memory/creating-guard-pages
    lpvAddr = VirtualAlloc(NULL, dwPageSize,
    MEM_RESERVE | MEM_COMMIT,
    PAGE_READONLY | PAGE_GUARD);

    或由 VirtualProtectEx 修改:
    VirtualProtectEx(hProcess, lpAddress, dwSize, PAGE_NOACCESS, &old);


    VirtualProtectEx(hProcess, lpAddress, dwSize, PAGE_GUARD | PAGE_READONLY, &old);
    GetLastError将返回 299( ERROR_PARTIAL_COPY )

    使用 VirtualQueryEx 检索指定区域内页面的访问保护

    关于windows - 是否存在 ReadProcessMemory 失败的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215218/

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