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

时间:2018-06-07 16:42:22

标签: assembly linux-kernel kernel paging cpu-registers

我正在阅读Linux内核,我了解了cr0控制寄存器,它存储了有关分页保护模式等的标志。

我想知道,如果有可能的话,如果我设法改变cr0的值以修改标志会发生什么?

我不想通过禁用分页或任何东西破坏记忆中的某些东西,所以我想自己尝试,但我担心会发生什么。

1 个答案:

答案 0 :(得分:6)

如果你正在运行内核代码,那么修改CR0肯定是可行的(并且在启动时是必需的)。大多数情况下,修改它只会导致系统或多或少地立即崩溃。

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