1. 调试分析 Linux 0.00 引导程序

1.1. 实验目的

  • 熟悉实验环境;

  • 掌握如何手写 Bochs 虚拟机的配置文件;

  • 掌握 Bochs 虚拟机的调试技巧;

  • 掌握操作系统启动的步骤;

1.2. 实验内容

1.2.1. 掌握如何手写Bochs虚拟机的配置文件

  • 简介 Bochs 虚拟机的配置文件

  • 如何设置从软驱启动

  • 如何设置从硬盘启动

  • 如何设置调试选项

1.2.2. 掌握Bochs虚拟机的调试技巧

  • 如何单步跟踪?

  • 如何设置断点进行调试?

  • 如何查看通用寄存器的值?

  • 如何查看系统寄存器的值?

  • 如何查看内存指定位置的值?

  • 如何查看各种表,如 gdt, idt, ldt 等?

  • 如何查看 TSS?

  • 如何查看栈中的内容?

  • 如何在内存指定地方进行反汇编?

1.2.3. 计算机引导程序

  1. 如何查看 0x7c00 处被装载了什么?

  2. 如何把真正的内核程序从硬盘或软驱装载到自己想要放的地方;

  3. 如何查看实模式的中断程序?

  4. 如何静态创建 gdt 与 idt ?

  5. 如何从实模式切换到保护模式?

  6. 调试跟踪 jmpi 0,8 ,解释如何寻址?

1.3. 实验报告

通过仔细的调试与跟踪程序,完成以下任务:

  1. 请简述 head.s 的工作原理

  2. 请记录 head.s 的内存分布状况,写明每个数据段,代码段,栈段的起始与终止的内存地址

  3. 简述 head.s 57 至 62 行在做什么?

  4. 简述 iret 执行后, pc 如何找到下一条指令?

  5. 记录 iret 执行前后,栈是如何变化的?

  6. 当任务进行系统调用时,即 int 0x80 时,记录栈的变化情况。

1.3.1. 评分标准

  1. 回答上述6个问题,记录描述要详细完整,每题 15%,总共 90%

  2. 格式规范美观,10%