15

Freedos ブートローダーに問題があるようです。(特定の状況では、ブートコードがカーネルを見つけられないようです。)

そのため、gdb を使用して qemu でブートローダーをデバッグしようとしています。いくつかの wiki と無料で入手できるオンライン コースの資料にある指示に従って、qemu を次のように実行します。

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

そして、このようにgdbを接続します

$ gdb
(gdb) target remote localhost:1234

siSeaBIOS と思われる最初の 10 から 12 の命令を実行できます。

しかし、それを過ぎて、ブートローダー コードにステップインしようとすると、FreeDos メニュー プロンプトまで、中断することなく実行が継続されます。これにより、実行時に段階的に調べたいブートローダー コードが完全にスキップされます。

ブートローダーをステップスルーするにはどうすればよいですか?

[自分で試してみたい場合は、プロジェクトの Web サイトから freedos フロッピー イメージをダウンロードできます。]

4

1 に答える 1

17

ここでは、qemu 1.3 と gdb 7.3.50.20111117 を使用して正常に動作します (使用したバージョンについては言及していません)。退屈してブートローダーをキャッチするブレークポイントを配置するまで、大量の命令を 1 ステップ実行することができました。

(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

于 2013-01-11T00:36:45.477 に答える