MIT 6.828 Operating System Engineering
CPU上电时执行的第一条指令是jump存储在ROM中的指令。BIOS将把存储在硬盘第一扇区中的512字节引导扇区加载到物理地址0x7c00到0x7dff的内存中。接下来,是时候执行引导加载程序代码(从实模式切换到保护模式)并进入内核
先在0x7c00处切断点,看看在执行boot loader之前,寄存器和堆栈的状况。可以看到%eip
存储CPU要读取指令的地址,段寄存器%ss
为0,也就是处于实模式下
当要正式进入boot loader(即boot main)之前,查看寄存器和堆栈的情况。栈顶寄存器%esp
初始化为正确的0x7c00,段寄存器%ss
也表示此时处于保护模式下
再单步运行一步,发现将%esp
的值(也就是返回地址)推入堆栈。所有准备工作做好,就要正式进入boot main
其实做到这步,能理顺整个流程,其实这个assignment也就完成了。在回头看看一开始的要求
第一步:找到内核的入口点_start
第二步,在该入口点切断点,并查看相关寄存器堆栈内容