在Windows中,每个进程的高内存(0x80000000或0xc0000000)都被保留用于内核代码,用户代码无法访问这些内存区域,如果尝试访问,则会引发访问冲突异常。
我想知道内核空间是如何受到保护的?
是通过内存分段还是通过分页?
我希望听到一个技术上的解释。
非常感谢, 迈克尔。
我想知道内核空间是如何受到保护的?
是通过内存分段还是通过分页?
我希望听到一个技术上的解释。
非常感谢, 迈克尔。
这很简单,不需要讨论环和内核行为。访问特定地址的虚拟内存需要该地址被映射,操作系统必须为该地址分配一个内存页。负责此操作的低级 WinAPI 函数是 VirtualAlloc()。它有一个可选地址参数作为第一个参数。如果请求无法映射到地址,操作系统将直接拒绝。否则,与防止您映射地址空间最低 64KB 中的任何地址完全相同。