在qemu中使用gdb调试引导加载程序

时间:2013-01-09 17:28:06

标签: debugging assembly gdb bootloader qemu

Freedos引导程序似乎存在问题。 (在某些情况下,似乎bootcode无法找到内核。)

所以我试图用gdb调试qemu中的bootloader。按照几个维基上的说明和免费提供的在线课程资料,我像这样运行qemu

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

然后像这样连接gdb

$ gdb
(gdb) target remote localhost:1234

我可以通过si逐步执行前10 - 12条指令,我认为这是SeaBIOS。

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

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

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

1 个答案:

答案 0 :(得分:10)

使用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位模式。