如果我改变控制寄存器 cr0 的值会发生什么?

What happens if I change the value of the control register cr0?

我正在阅读有关 Linux 内核的信息,并且我了解了 cr0 控制寄存器,该寄存器存储有关 分页 的标志保护模式

我想知道,如果有可能的话,如果我以某种方式设法更改 cr0 的值以修改标志,会发生什么情况?

我不想通过禁用分页或其他任何方式破坏内存中的某些内容,所以我想自己尝试一下,但我担心会发生什么。

如果您是 运行 内核代码,当然可以(并且在启动时有必要)修改 CR0。大多数时候,修改它只会导致您的系统或多或少立即崩溃。

我不知道这是否值得 "afraid" -- 取决于您对重启计算机的关心程度。您可以在 this page 上看到 CR0 控制的所有内容。修改它需要修改 Linux 内核或编写内核模块。如果您尝试从用户空间代码访问它(例如,使用内联汇编),那么您的用户空间程序将简单地遇到错误并退出,就像您尝试从无效地址读取时发生的情况一样。