访问只读的系统内存

Windows 内存管理器 强制对未标记为可写的页面进行只读访问。

只读内存始终在用户模式下受到保护。 但是,在 Windows NT 4.0 及更早版本中,只读内存在内核模式下不受保护。

如果 Windows 内核模式驱动程序或应用程序尝试写入只读内存段,系统会检查发出 bug。 有关详细信息,请参阅 Bug 检查0xBE:ATTEMPTED_WRITE_TO_READONLY_MEMORY

截获系统调用

某些驱动程序通过覆盖驱动程序自己的代码并插入跳转指令或其他更改来截获系统调用。 由于驱动程序自己的代码是只读的,因此此方法将导致发出 bug 检查。

全局字符串

如果要修改全局字符串,则不得将其声明为指向常量值的指针:

CHAR *myString = "This string cannot be modified.";

在这种情况下,链接器可能会将字符串放在只读内存段中。 然后,尝试修改字符串将导致 bug 检查。

相反,字符串应显式声明为 L 值字符数组:

CHAR myString[] = "This string can be modified.";

此声明可确保将字符串放入可写内存中。