Отладка загрузчика с помощью gdb в qemu

Кажется, есть проблема с загрузчиком Freedos. (Похоже, что загрузочный код не может найти ядро ​​при определенных обстоятельствах.)

Поэтому я пытаюсь отладить загрузчик в qemu с помощью gdb. Следуя инструкциям, найденным в нескольких вики и свободно доступных онлайн-материалах курса, я запускаю qemu следующим образом

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

А затем подключите GDB, как это

$ gdb
(gdb) target remote localhost:1234

Я могу пройти первые 10 - 12 инструкций с si я предполагаю, что это SeaBIOS.

Но после этого, когда я пытаюсь войти в код загрузчика, он продолжает выполнение без прерывания, вплоть до приглашения меню FreeDos. Это полностью пропускает код загрузчика, который я хотел бы изучить шаг за шагом при его выполнении.

Что мне нужно сделать, чтобы я мог перейти через загрузчик?

[Вы можете скачать образы дискет на фридос с сайта проекта, если хотите попробовать сами.]

1 ответ

Решение

Здесь отлично работает, используя 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,

Другие вопросы по тегам