4

有人可以向我解释如何在硬件不提供的平台上模拟 NX 位,例如 32 位 x86 吗?我会很高兴解释它的模拟方式的基础知识,因为我根本无法想象它是如何实现的。提前致谢。

4

2 回答 2

4

您可能想阅读有关Exec ShieldPaX PAGEEXECPaX SEGMEXEC的信息。

于 2011-01-16T01:04:23.687 回答
0

我从未实现过 NX 仿真,但了解 x86 是我对它如何工作的最佳猜测。

这一切都与内核如何设置全局描述符表以定义可能包含代码的地址范围有关。

如果我可以粗略地总结一下……在 32 位保护模式下的 x86 上,那些来自 16 位代码的旧“段寄存器”仍然具有一定的意义。段寄存器决定使用GDT中的哪个条目。GDT 条目本质上是一个内存范围。如果内核将cs(代码段)寄存器指向仅具有 [x, y] 范围内的地址的 GDT 条目,则该范围之外的地址是不可执行的。

请注意,这比 NX 位更粗粒度,因为 NX 位进入页表条目。因此,NX 位允许您将任意页面标记为不可执行,而使用cs段仅允许您将(通常变化很大、连续的)范围指定为不可执行。

于 2011-01-16T01:29:39.977 回答