gpt4 book ai didi

linux-kernel - nosmep 和 noexec=off 有什么区别

转载 作者:行者123 更新时间:2023-12-04 15:46:18 24 4
gpt4 key购买 nike

我想知道 linux 内核命令行中这两个参数之间的区别:

  • 不执行=关闭
  • 鼻息

在这两种情况下,它都拒绝内核执行用户空间内存中的代码。但我看不出它们之间有任何区别。

dmesg 中的错误消息不同,但行为似乎相同。

谢谢

最佳答案

noexec 参数控制内核是否可以使用分页结构的 XD 标志(也称为 NX 标志)来标记不应如此执行的页面。另一方面,nosmep 参数指定是否启用 SMEP。请注意,nosmep 仅在内核版本和处理器都支持 SMEP 时有效(参见:How can i enable/disable kernel kaslr, smep and smap)。此外,XD 仅在内核以 64 位运行或使用 36 位分页且 IA32_EFER.NXE 设置为 1 时有效。

XD 和 SMEP 标志确定是否可以获取给定内存位置的指令。 SMEP 覆盖 XD,这意味着如果设置了 SMEP,supervisor-mode无论 XD 标志如何,都不允许代码从用户页面获取指令(用于执行)。否则,如果不支持或禁用 SMEP,则在以下情况下不允许取指令:

  • 主管模式代码尝试从用户或主管页面获取指令,其中至少有一个分页结构的 XD 标志为 1 的翻译。
  • 用户模式代码尝试从具有翻译的用户页面获取指令,其 XD 标志在至少一个分页结构中为 1。
  • 用户模式代码尝试从主管页面获取指令。

在任何这些情况下,都会发生页面错误异常 (#PF)。

关于linux-kernel - nosmep 和 noexec=off 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55639893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com