如果您想了解这方面的知识,最好的方法之一是通过跟踪Linux引导过程(Kernel Boot Process)的代码来学习。例如,假设您在x86架构上运行Linux,则引导时BIOS将控制权交给引导加载程序,然后引导加载程序将控制权交给内核。然后,内核通过一系列流程进行启动。最初,大部分内容都是用汇编语言编写的 - 可以查看/arch/x86/boot/header.S。然后进入/arch/x86/boot/main.c。在main函数的末尾,可以看到对go_to_protected_mode()的调用。这个函数可以在/arch/x86/boot/pm.c中找到。因此,一旦您引导进入内核,它就成为CPU的网关,并且您的代码在内核提供的虚拟机中运行。用户程序必须通过这个虚拟机完成所有操作,从而无法在其他模式下运行。
用户模式只能通过产生某种中断来改变其特权模式。看起来,中断的目的是改变程序的特权模式。在生成任何正常中断时,特权模式都会提升并开始运行一些内核代码..... 结论:通过中断自身,用户模式程序无法提升特权并继续运行自己的代码.... 这就是这个伟大的安全机制的运作方式。