gdb+bochs配置过程

来源:互联网 发布:随机数抽奖软件 编辑:程序博客网 时间:2024/06/08 11:49

1. 安装bochs

m@mV:~/soft/bochs-2.6.8$ ./configure --with-sdl2  --enable-disasm --enable-gdb-stubm@mV:~/soft/bochs-2.6.8$ makem@mV:~/soft/bochs-2.6.8$ sudo make install

bochs的配置文件大概长成这样,这里主要关注第一行

gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0memory: guest=512, host=256romimage: file=$BXSHARE/BIOS-bochs-latestvgaromimage: file=$BXSHARE/VGABIOS-lgpl-latestmouse: enabled=0pci: enabled=1, chipset=i440fxprivate_colormap: enabled=0floppya: 1_44=obj/a.img, status=insertedata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15ata2: enabled=0, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11ata3: enabled=0, ioaddr1=0x168, ioaddr2=0x360, irq=9boot: floppyfloppy_bootsig_check: disabled=0log: obj/bochsout.txtpanic: action=askerror: action=reportinfo: action=reportdebug: action=ignore, pci=report # report BX_DEBUG from module 'pci'debugger_log: -parport1: enabled=1, file="parport.out"speaker: enabled=1, mode=sound


2. 使用gdb+bochs调试内核

启动一个终端运行bochs

m@mV:~/wspace/os/myos_onx86$ make runmake premake...dd if=/dev/zero of=obj/a.img bs=1k count=1440记录了1440+0 的读入记录了1440+0 的写出1474560 bytes (1.5 MB, 1.4 MiB) copied, 0.0088694 s, 166 MB/snasm src/boot/boot.asm -o ./obj/boot.o -l ./obj/boot.map./tool/bin/img_mker -add_sect ./obj/boot.o ./obj/a.img 0nasm src/boot/loader.asm -o ./obj/loader.o -l ./obj/loader.map./tool/bin/img_mker -add_sect ./obj/loader.o ./obj/a.img 1./tool/bin/img_mker -add_sect ./obj/kernel.bin.g ./obj/a.img 121bochs -qf img/bochsrc_naked========================================================================                       Bochs x86 Emulator 2.6.8                Built from SVN snapshot on May 3, 2015                  Compiled on Oct 21 2016 at 23:09:21========================================================================00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'00000000000i[      ] reading configuration from img/bochsrc_naked00000000000i[      ] Enabled gdbstub00000000000e[      ] img/bochsrc_naked:22: invalid choice 'sound' parameter 'mode'00000000000e[PCSPK ] img/bochsrc_naked:22: unknown parameter for speaker ignored.00000000000i[      ] installing sdl2 module as the Bochs GUI00000000000i[SDL2  ] maximum host resolution: x=2560 y=160000000000000i[      ] using log file obj/bochsout.txt
Waiting for gdb connection on port 1234
Connected to 127.0.0.1(在另一终端gdb输入target remote localhost:1234时,此行提示才输出)

再开一个终端

m@mV:~/wspace/os/myos_onx86$ gdb ./obj/kernel.bin.g GNU gdb (Ubuntu 7.11-0ubuntu1) 7.11Copyright (C) 2016 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty" for details.This GDB was configured as "i686-linux-gnu".Type "show configuration" for configuration details.For bug reporting instructions, please see:<http://www.gnu.org/software/gdb/bugs/>.Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".Type "apropos word" to search for commands related to "word"...Reading symbols from ./obj/kernel.bin.g...done.(gdb) b kernel_main Breakpoint 1 at 0x30b4e: file src/kernel/main.c, line 28.(gdb) target remote localhost:1234Remote debugging using localhost:12340x0000fff0 in ?? ()(gdb) cContinuing.Breakpoint 1, kernel_main () at src/kernel/main.c:2727void kernel_main() {(gdb) l22        ++i;23        delay(100);24    }25}2627void kernel_main() {28    PROCESS* p = proc_table;2930    clear_screen();31    set_text_attr(TA_FOREGROUND_RED);(gdb) n28    PROCESS* p = proc_table;(gdb) p proc_table $1 =   {{    regs = {      gs = 0,       fs = 0,       es = 0,       ds = 0,       edi = 0,       esi = 0,       ebp = 0,       kernel_esp = 0,       ebx = 0,       edx = 0,       ecx = 0,       eax = 0,       retaddr = 0,       eip = 0,       cs = 0,       eflags = 0,       esp = 0,       ss = 0    },     ldt_sel = 0,     ldts =       {{---Type <return> to continue, or q <return> to quit---n        limit_low = 0,         base_low = 0,         base_mid = 0 '\000',         attr1 = 0 '\000',         limit_high_attr2 = 0 '\000',         base_high = 0 '\000'      },      {        limit_low = 0,         base_low = 0,         base_mid = 0 '\000',         attr1 = 0 '\000',         limit_high_attr2 = 0 '\000',         base_high = 0 '\000'      }},     pid = 0,     p_name =       '\000' <repeats 15 times>  }}(gdb) n30    clear_screen();(gdb) l25}2627void kernel_main() {28    PROCESS* p = proc_table;2930    clear_screen();31    set_text_attr(TA_FOREGROUND_RED);32    printf("kernel_main\n");33    set_text_attr(TA_FOREGROUND_GREEN | TA_FOREGROUND_INTESITY);34    printf("text color test.\n");(gdb) n31    set_text_attr(TA_FOREGROUND_RED);(gdb) sset_text_attr (attr=4 '\004') at src/lib/string.c:3333    g_text_attr = attr;(gdb) pstk ebp->0x32fec:0x0003301c esp->0x32fe8:0x00033004(gdb) p g_text_attr $2 = 15 '\017'(gdb) p/x g_text_attr $3 = 0xf(gdb) 


剩下的就是gdb的使用了,玩的开心.

0 0