MBRセクション用のx86アセンブリプログラムを作成しました。私はそれを次のようにコンパイルします:
nasm hellombr.asm -f bin -o hellombr.img
次に、qemuで実行します。
qemu -fda hellombr.img -boot a
問題は、ソースレベルでプログラムをデバッグするにはどうすればよいですか?
nasm
ELFファイルにデバッグシンボルを作成してから、これをフラットバイナリにダンプして、MBRで使用する必要があります。次に、ELFファイルから必要なシンボルを読み取るようにGDBに指示できます。
完全な手順は次のようになります。
$ nasm hellombr.asm -f elf -g -o hellombr.elf $objcopy-Oバイナリhellombr.elfhellombr.img $ qemu -s -S -fda hellombr.img -boot a $ gdb (gdb)シンボルファイルhellombr.elf (gdb)ターゲットリモートローカルホスト:1234
この答えをqemu
見るために私が渡すフラグの説明については。
qemuを使用する代わりに、bochsを使用します。低速ではありますが、完全に互換性があります。これもエミュレーターですが、ソースから作成する場合は、これらのフラグを使用して次のようにビルドします。
./configure --enable-debugger --enable-disasm --disable-docbook
make
make install
コードにブレークポイントを設定し、コードをステップスルーして、GDT、IDT、および必要なすべての情報を表示できます。
本当に良い(そして簡単な)方法は、BochsでIDAを使用することです。ここに、ブートローダー開発のための他のヒント/提案とともに、優れたブログ投稿があります。