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

Jul*_*ant 2 paging assembly kernel cpu-registers linux-kernel

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

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

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

yal*_*lue 6

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

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

  • 合理的方式是"使用"它将使用虚拟机或仿真器,例如BOCHS具有内置调试器,可让您单步执行传统BIOS引导扇区. (2认同)