NX位仿真

时间:2011-01-16 00:37:54

标签: operating-system bit buffer-overflow

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

2 个答案:

答案 0 :(得分:4)

您可能希望了解Exec ShieldPaX PAGEEXECPaX SEGMEXEC

答案 1 :(得分:0)

我从来没有实现过NX模拟,但是在这里了解x86的一些内容是我最好的猜测它是如何工作的。

这一切都与内核如何设置global descriptor table以定义可能包含代码的地址范围有关。

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

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