跳转至

特殊保护类型

表 6-1 中的两种保护类型包含写入时复制保护。当多个进程拥有相同的内存页面(比如映射了系统 DLL 的页面)时,使用写入时复制保护来节省内存。实际数据只存储在一个物理位置,操作系统把包含该数据的所有内存页面虚拟映射到物理位置。如果共享内存的进程对它进行更改,会在物理内存中制作数据副本,应用更改,并把该进程的内存页面重新映射到新的物理内存。发生写入时复制时,所有受影响页面的保护都会相应改变;PAGE_WRITECOPY 会变成 PAGE_READWRITE,PAGE_EXECUTE_WRITECOPY 会变成 PAGE_EXECUTE_READWRITE。我没有发现写入时复制页面在游戏破解中有特定用途,但理解它们很有用。

页面也可以创建为带守卫保护。守卫页面有次要保护,定义为 PAGE_GUARD | PAGE_READONLY。程序尝试访问守卫页面时,操作系统会抛出 STATUS_GUARD_PAGE_VIOLAT ION 异常。异常处理后,守卫保护会从页面移除,只留下次要保护。操作系统使用这种保护的一种方式是在调用栈顶部放置守卫页面并在命中时分配更多内存,从而动态扩展调用栈。一些内存分析工具在堆内存之后放置守卫页面以检测堆损坏 bug。在游戏破解的语境中,守卫页面可以充当绊线,告诉你游戏何时可能试图在其内存中检测你的代码。