首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Linux内核需要memory NX的硬件支持?

为什么Linux内核需要memory NX的硬件支持?
EN

Stack Overflow用户
提问于 2015-09-25 13:15:04
回答 3查看 287关注 0票数 1

在Linux内核中,由于早期的x86体系结构中没有NX位,所以页表条目(PTE)只包含读写位,而不包含eXecute位。

我不明白为什么PTE中的X位需要硬件支持。

如我所见,我们可以在内核源代码中定义一个位来将PTE结构化为X位。当访问页表时,内核将在PTE中检查此位。

任何解释都将不胜感激。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2015-09-25 13:37:09

因为你的方案一旦在does not use that bit for NX的架构上运行就会崩溃。

票数 0
EN

Stack Overflow用户

发布于 2015-09-25 13:38:51

软件中的NX?假设内核可以确定陷阱的原因是来自指令队列的内存加载,而不是任何任意的内存访问,则必须始终使所有页面无效,以保证来自某个任意"jmp 0x1231231“指令的陷阱。这对于其他任何事情来说都太昂贵了,除了学术练习。

(代码页可以被列入白名单,但数据页不能)

票数 0
EN

Stack Overflow用户

发布于 2015-09-25 13:39:00

硬件需要区分“读取数据”和“读取代码”。在NX-bit支持之前,如果一个页面是可读的,你就可以开始使用它了。

Aki的回答是我所说的硬币的另一面。在没有硬件支持的情况下进行NX将需要单步执行每个正在运行的进程来检查其跳转/调用指令。或者通过解析指令流,或者通过在每条指令之前使所有非代码页无效。(如果发现访问是加载而不是跳转,则将它们标记为有效。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32775266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档