gpt4 book ai didi

windows - 为什么无法从具有 PAGE_GUARD 保护的 block 中读取数据?

转载 作者:可可西里 更新时间:2023-11-01 09:45:06 25 4
gpt4 key购买 nike

我使用 ReadProcessMemory 函数从地址空间读取数据。我尝试读取所有具有 MEM_PRIVATE 类型的 block 。但是当那个 block 有 PAGE_GUARD 保护时我得到错误(函数返回 0),为什么?

感谢大家。

最佳答案

具有 PAGE_GUARD 保护的页面保证不可访问。对它的任何访问都会产生页面错误,并作为 STATUS_GUARD_PAGE_VIOLATION 异常反射回拥有该页面的进程。此功能在 Windows 中大量使用,以检测此站点的命名条件并从中恢复。

线程堆栈的最后两页是保护页。当程序递归地崩溃,消耗所有堆栈空间并触发异常时,操作系统重新映射这些页面,使它们可用作紧急堆栈空间,并重新引发 STATUS_STACK_OVERFLOW 异常。这允许程序处理心脏病发作。一条简短的消息和程序终止是通常的结果。

触发页面守卫异常是一蹴而就的事情,一旦你做到了,就没有守卫了。显然,非常非常重要的是,只有进程中的代码才会触发它。在任何情况下,您都不会进入另一个进程的地址空间并触发异常,它永远都会有好结果。除了进程不知道发生了什么,因此永远无法正确响应异常之外,它还删除了安全舱口。如果你戳了其中一个堆栈保护页面,那么你会立即终止程序。

现在应该很明显了,使用 ReadProcessMemory() 有意限制您访问这些页面。当你这样做时,没有什么好事可能会发生。返回值告诉您“这里没什么可看的,继续前进”。

关于windows - 为什么无法从具有 PAGE_GUARD 保护的 block 中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363520/

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