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

Assembly 如果更改控制寄存器cr0的值,会发生什么情况?,assembly,linux-kernel,kernel,paging,cpu-registers,Assembly,Linux Kernel,Kernel,Paging,Cpu Registers,我正在阅读有关Linux内核的文章,并了解了cr0控制寄存器,该寄存器存储有关分页、保护模式等的标志 我想知道,如果可能的话,如果我设法更改cr0的值来修改标志,会发生什么 我不想因为禁用分页或任何东西而破坏内存,所以我想自己尝试一下,但我担心会发生什么。如果您正在运行内核代码,修改CR0肯定是可能的(而且在启动时是必要的)。大多数情况下,修改它只会导致系统或多或少立即崩溃 我不知道这是否值得“害怕”——这取决于你有多在乎重启你的机器。您可以看到CR0控件上的所有内容。修改它需要修改Linux内

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

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


我不想因为禁用分页或任何东西而破坏内存,所以我想自己尝试一下,但我担心会发生什么。

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

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

明智的“摆弄”方式是使用虚拟机或模拟器,例如,BOCHS有一个内置调试器,允许您单步执行传统BIOS引导扇区。