有人可以向我解释如何在32位x86等硬件无法提供的平台上模拟NX位吗?我会很高兴解释它的模仿方式的基础知识,因为我无法想象它是如何实现的。提前谢谢。
答案 0 :(得分:4)
您可能希望了解Exec Shield,PaX PAGEEXEC和PaX SEGMEXEC。
答案 1 :(得分:0)
我从来没有实现过NX模拟,但是在这里了解x86的一些内容是我最好的猜测它是如何工作的。
这一切都与内核如何设置global descriptor table以定义可能包含代码的地址范围有关。
如果我可以概括地总结一下......在32位保护模式下的x86上,那些来自16位代码的旧“段寄存器”仍有一些含义。段寄存器确定使用GDT中的哪个条目。 GDT条目本质上是一个内存范围。如果内核将cs
(代码段)寄存器指向仅具有范围[x,y]的地址的GDT条目,则该范围之外的地址是不可执行的。
请注意,这比NX位更粗粒度,因为NX位进入page table条目。因此,NX位允许您将任意页面标记为不可执行,而使用cs
段仅允许您将(通常是大的,连续的)范围指定为不可执行的。