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软盘图片。]
答案 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位模式。