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

rhl*_*lee 12 debugging assembly gdb qemu bootloader

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

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

qemu-system-i386 -fda fdboot.img -boot a -s -S
Run Code Online (Sandbox Code Playgroud)

然后像这样连接gdb

$ gdb
(gdb) target remote localhost:1234
Run Code Online (Sandbox Code Playgroud)

我可以逐步完成前面的10 - 12条指令si,我假设它是SeaBIOS.

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

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

[如果您想尝试自己,可以从项目网站下载freedos软盘映像.]

Jes*_*ter 11

使用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
Run Code Online (Sandbox Code Playgroud)

请注意,我首先使用gdb设置为16位模式set architecture i8086.

  • 在 qemu 的启动参数中添加 `-enable-kvm` 将使 gdb 断点失效。 (2认同)