我想知道Linux内核命令行中这两个参数之间的区别:
在两种情况下,它都拒绝内核执行用户区内存中的代码。 但是我看不到它们之间的任何区别。
dmesg中的错误消息是不同的,但是行为似乎是相同的。
谢谢
答案 0 :(得分:1)
noexec
参数控制内核是否可以使用分页结构的XD标志(也称为NX标志)来标记不应被执行的页面。另一方面,nosmep
参数指定是否启用SMEP。请注意,nosmep
仅在内核版本和处理器均支持SMEP时才有效(请参阅:How can i enable/disable kernel kaslr, smep and smap)。此外,仅当内核以64位或36位分页运行并且IA32_EFER.NXE
设置为1时,XD才有效。
XD和SMEP标志确定是否可以提取给定存储位置的指令。 SMEP覆盖XD,这意味着,如果设置了SMEP,则无论XD标志如何,都不允许supervisor-mode代码从用户页面获取指令(用于执行)。否则,如果不支持或禁用SMEP,则在以下情况下不允许提取指令:
在这些情况下,都会发生页面错误异常(#PF)。