木曜日, 4月 23, 2009

bochsdbgでブートコードを走らせる

AT互換機におけるブートプロセス
  1. 電源ONとともにCPUが起動する。このときはリアルモードである。
  2. ROMのBIOSコードを実行する。
  3. フロッピーディスクの先頭セクタ512バイトをメインメモリの0x0000:0x7c00に読み込んでその先頭にジャンプする。
  4. ここから先は読み込まれた512バイトのブートコードに全ておまかせである。

ブートコードは0x7c00番地に読み込まれてから実行されるのであって、そこでブレークポイントをブートコードの開始番地である0x7c00に設定する。 (これも面白かった)
<bochs:1> lb 0x7c00

See Using Bochs internal debugger for internal debugger commands

Difference Between gdb+bochs and bochsdbg
gdb+bochs:源码级调试
bochsdbg:汇编级调试


汇编级调试器的bochsdbg调试环境配置
  1. 将bochs的源码解压到/usr/src/bochs-2.3.7文件夹中(For Example)
  2. cd /usr/src/bochs-2.3.7
  3. ./configure --enable-debugger --enable-disasm
  4. make all
  5. make install
  6. 在编译安装完成后使用将安装到/usr/local/bin目录下的bochs改名为bochsdbg
    mv /usr/local/bin/bochs /usr/local/bin/bochsdbg


源码级调试的gdb+bochs调试环境配置
  • 建立能够与gdb通信进行源码级调试的bochs,与上部分相同,进入bochs的源码目录,重新配置编译,加入stub for gdb模块,使其能够与gdb通信,执行以下命令:
    cd /usr/src/bochs-2.3.7
    ./configure --enable-gdb-stub
    make all
    make install

  • 要使用gdb进行调试需要修改bochs的配置文件,将
    gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0

    添加到配置文件中,并使用bochs打开虚拟机。
  • 另开一个终端窗口,以下命令打开gdb:
    >gdb <内核二进制文件>
    (gdb) target remote localhost:1234

    gdb连接到bochs后就可以使用gdb进行源码级调试了,需要注意的是在编译内核时需要加入”-g”选项以生成调试符号。



bochs-debugger and bochs-gdb in Fedora
  • bochs-debugger with the builtin debugger (--enable-x86-debugger --enable-debugger)
  • bochs-gdb with the gdb stub (--enable-x86-debugger --enable-gdb-stub)

0 件のコメント: