一、通make生成执行文件的过程
a) 操作系统镜像文件ucore.img是如何一步一步生成的 在编译时使用make V=,相当于设置一个标记,使得把make编译执行的过程全部展示出来。
首先,调用了GCC,把一些C的源代码编译成.O的目标文件。
然后,调用了ld,把这些目标文件准换成一个可执行程序,比如下面示例,转换成为了bootloader的一个执行程序bootblock.out。
最后,调用了dd,把bootloader、bootblock和kernel放到虚拟的硬盘uCore.img里面。
b) 硬盘的主引导扇区的特征是什么
在sign.c中,先申请了一个512字节的空间buf,然后将buf初始
化为全0,再将主引导程序写入这个空间,最后,在buf的最后两个字节写入55AA。所以硬盘的主引导扇区的特征是主引导扇区的512个字节的最后两个字节是55AA。
二、使用qemu执行并调试lab1中的软件
a) 从启动开始,单步跟踪BIOS的执行
实验远程调用的方法,启动qemu,并让它进入-S状态。
开启另外一个终端,执行gdb命令,绑定端口1234。
在QEMU窗口中使用 x/10i $pc 查看最近10条指令的反汇编内容。在gdb中使用si命令执行单步,显示位置。可以看到一启动,就处于0xfffffff0的位置,第一条指令是个长跳转指令。
b) 在初始化位置0x7c00设置实地址断点,测试断点正常 输入 b *0x7c00设置断点,输入 c 执行到断点。
输入x/10i $pc 查看最近10条指令的反汇编内容,可以看到qemu执行到断点0x7c00。断点工作正常。
再次输入c执行,qemu继续工作。得到结论,断点工作正常。
c) 从0x7c00开始跟踪代码运行,将单步跟踪反汇编得到的代码与bootasm.S和bootblock.asm进行比较
经过比较发现:gdb得到的反汇编代码与bootasm.S和bootblock.asm中的代码基本相一致。
d) 找一个bootloader或内核中的代码位置,设置断点并进行测试
输入 b *0x7c10设置断点,输入 c 执行到断点。输入x/10i $pc 查看最近10条指令的反汇编内容。
输入stepi,单步执行一条机器指令。再一次输入x/10i $pc 查看最近10条指令的反汇编内容。最后,输入c,qemu继续工作。