代码之家  ›  专栏  ›  技术社区  ›  Julien Séveno-Piltant

如果更改控制寄存器cr0的值,会发生什么情况?

  •  2
  • Julien Séveno-Piltant  · 技术社区  · 7 年前

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

    我在想,如果有可能的话,如果我设法改变 CR0 要修改标志吗?

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

    1 回复  |  直到 7 年前
        1
  •  6
  •   yalue    7 年前

    如果您运行的是内核代码,那么肯定有可能(并且在启动时是必要的)修改cr0。大多数情况下,修改它只会导致您的系统几乎立即崩溃。

    我不知道这是否值得“害怕”取决于你有多在乎重启你的机器。你可以看到cr0控制的所有东西 this page . 修改它需要修改linux内核或编写内核模块。如果您试图从用户空间代码(例如,使用内联程序集)访问它,那么您的用户空间程序只会遇到一个错误并退出,就像您试图从无效地址读取时所发生的情况一样。