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/

10-16 19:03