2013-01-09 50 views
12

Freedos引导程序似乎存在问题。 (看起来bootcode在某些情况下找不到内核。)在qemu中使用gdb调试引导程序

所以我想用gdb在qemu中调试bootloader。以下几个wiki和在线免费提供课程材料中的说明,我跑QEMU这样

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

然后连接GDB这样

$ gdb 
(gdb) target remote localhost:1234 

我可以通过前10个步骤 - 与12条指令我认为这是SeaBIOS的si

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

我需要做什么以便我可以通过引导加载程序执行一些操作?

[您可以从项目网站下载FreeDOS的软盘镜像,如果你想尝试自己。]

+0

其他建议:BOCHS有一个内置的调试器,可以让您单步引导扇区。 –

回答

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 

请注意,我已经设置GDB以16位模式下首先使用set architecture i8086

+0

我使用gdb 7.5-ubuntu和qemu 1.2.0(qemu-kvm-1.2.0 + noroms-0ubuntu2,Debian)。是的,我尝试在* 0x7c00处突破,但它似乎超过了这个地址,从不中断,达到Freedos的交互式菜单。我也尝试将架构设置为i8086,没有任何区别。我会尝试从trunk/head编译qemu和gdb,看看它是否有任何区别。 – rhlee

+0

是的,我从HEAD编译qemu,现在我可以顺利完成所有的指示。 – rhlee

+0

你是什么意思从HEAD编译qemu?我从来没有听说过。我有这个相同的问题,但我不知道HEAD是什么意思。谨慎阐述? :) – Rob