15

Freedos 引导加载程序似乎有问题。(在某些情况下,引导代码似乎找不到内核。)

所以我正在尝试使用 gdb 调试 qemu 中的引导加载程序。按照在几个 wiki 上找到的说明和免费提供的在线课程资料,我像这样运行 qemu

qemu-system-i386 -fda fdboot.img -boot a -s -S

然后像这样连接gdb

$ gdb
(gdb) target remote localhost:1234

我可以逐步完成前 10 到 12 条指令si,我认为这些指令是 SeaBIOS。

但除此之外,当我尝试进入引导加载程序代码时,它会继续执行而不会中断,一直到 FreeDos 菜单提示符。这完全跳过了我想在执行时逐步检查的引导加载程序代码。

我需要做什么才能逐步通过引导加载程序?

[如果您想亲自尝试,可以从项目网站下载 freedos 软盘图像。]

4

1 回答 1

17

使用 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.

于 2013-01-11T00:36:45.477 回答