OS - NX 位和有效-无效位之间的区别

OS - Difference between NX bit and Valid-Invalid Bit

我的理解:

将页面的 NX 位设置为高意味着每当某些程序试图执行该页面中的代码时,都会导致分段错误。

还有一个Valid-Invalid位,访问标记为Invalid的页面也会导致段错误。

所以问题是:

当你已经有一个有效-无效位时,为什么 NX 位不是多余的?将页面标记为有效 NX 是什么意思?

首先,我将稍微更改一下术语。我不会使用像 valid/invalid 这样的术语,而是用 present/not 代替它们。

可以通过某种方式(读取、写入或执行)访问标记为存在的页面。标记为不存在的页面不能直接访问(如果有的话)。如果可以访问它,则必须首先将其从某种类型的后备存储 (disk/flash/...) 加载到内存中。

NX位只控制内存页是否有执行权限。为什么控制执行权限很重要?它有助于锁定系统以防止执行任意代码。

因此,同时标记为 NX 和不存在的页面是没有执行权限的页面,但可能需要从后备存储加载。

如果您没有 NX 位(尤其是在您的数据页上),那么如果一些聪明的黑客想出如何在 supervisor/kernel 模式下跳转到数据部分中的代码,那么他们的工作就完成了在您的系统上执行任意代码要容易得多。

希望对您有所帮助。