Freedos 引导加载程序似乎有问题。 (在某些情况下,引导代码似乎找不到内核。)
所以我试图用 gdb 调试 qemu 中的引导加载程序。按照在几个 wiki 和免费提供的在线类(class) Material 上找到的说明,我像这样运行 qemu
qemu-system-i386 -fda fdboot.img -boot a -s -S
然后像这样连接gdb
$ gdb
(gdb) target remote localhost:1234
我可以使用
si
单步执行前 10 - 12 条指令,我认为这是 SeaBIOS。但在那之后,当我尝试进入引导加载程序代码时,它会继续执行而不会中断,一直到 FreeDos 菜单提示。这完全跳过了我想在执行时逐步检查的引导加载程序代码。
我需要做什么才能通过引导加载程序?
[如果您想自己尝试,可以从项目网站下载 freedos 软盘镜像。]
最佳答案
使用 qemu 1.3 和 gdb 7.3.50.20111117 在这里工作正常(你没有说你使用的是什么版本)。
我能够单步执行大量指令,直到我感到无聊并放置一个断点来捕获引导加载程序:
(gdb) br *0x7c00
Breakpoint 1 at 0x7c00
(gdb) c
Continuing.
Breakpoint 1, 0x00007c00 in ?? ()
(gdb) x/i $eip
=> 0x7c00: jmp 0x7c3e
请注意,我首先使用
set architecture i8086
将 gdb 设置为 16 位模式。关于在 qemu 中使用 gdb 调试引导加载程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14242958/