有人能向我解释一下如何在32位x86等硬件不提供NX位的平台上模拟NX位吗?我非常希望能解释一下它是如何被模拟的,因为我根本无法想象它是如何实现的。提前谢谢。
发布于 2011-01-16 01:04:24
您可能想要阅读有关Exec Shield、PaX PAGEEXEC和PaX SEGMEXEC的信息。
发布于 2011-01-16 01:29:40
我从来没有实现过NX仿真,但是对x86有所了解,下面是我对它如何工作的最好的猜测。
这一切都与内核如何设置global descriptor table来定义可能包含代码的地址范围有关。
如果我可以用不雅的方式总结一下...在32位保护模式的x86上,那些来自16位代码的旧“段寄存器”仍然有一定的意义。段寄存器确定使用GDT中的哪个条目。GDT条目本质上是一个内存范围。如果内核将cs
(代码段)寄存器指向只具有x,y范围内地址的GDT条目,则该范围外的地址是不可执行的。
请注意,这比NX位更粗粒度,因为NX位位于page table条目中。因此,NX位允许您将任意页面标记为不可执行,而使用cs
段仅允许您将一个(通常变化较大的、连续的)范围指定为不可执行。
https://stackoverflow.com/questions/4703055
复制相似问题