【从头开始写操作系统系列】使用 Bochs 调试操作系统

在上一篇文章《环境搭建以及第一个Hello-World》中,笔者讲了如何安装 bochs 以及运行一个 helloworld 操作系统,但是使用上一篇文章中的方法安装的 bochs 是不支持调试的,下面我讲介绍如何使用源码编译的方法来安装 bochs,以及使用 bochs 来调试操作系统。

编译安装 Bochs下载 bochs 源码

解压之后进入该目录,进行配置

sudo ./configure –enable-debugger –enable-disasm

编译安装

sudo make

sudo make install

这时,bochs 就编译安装完成了,接下来我们继续使用上一篇文章中所使用的软盘映像。

用 Bochs 调试操作系统

启动带有调试的 bochs 之后,我们会看到bochs 会进入一个选项界面,,我们选择『6.Begin simulation』就可以开始调试了

部分 Bochs 调试指令

行为 指令 举例

在某物理地址设置断点 b addr b 0x7c00

显示当前所有断点信息 info break info break

继续执行,直至遇到断点 c c

单步执行 s s

单步执行(遇到函数跳过) n n

查看寄存器信息 info cpurfpsregcreg info cpurfpsregcre

查看堆栈 print-stack print-stack

查看内存物理地址内容 xp /nuf addr xp /40bx 0x9013e

查看线性地址内容 x /nuf addr x /40bx 0x13e

反汇编一段内存 u start end u 0x30400 0x3040d

反汇编执行的每一条指令 trace-on trace-on

每执行一条指令就打印 CPU 信息 trace-reg trace-reg

– 我们可以使用 help 来查看调试帮助

举例

采用上一篇文章中的镜像来进行调试

<bochs:1> b 0x7c00<bochs:2> c00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $……00014041008i[BIOS ] Booting from 0000:7c00(0) Breakpoint 1, 0x00007c00 in ?? ()Next at t=14041069(0) [0x000000007c00] 0000:7c00 (unk. ctxt): mov ax, cs; 8cc8<bochs:4> x /64xb 0x7c00[bochs]:0x00007c00 <bogus+0>: 0x8c 0xc8 0x8e 0xd8 0x8e 0xc0 0xe8 0x020x00007c08 <bogus+8>: 0x00 0xeb 0xfe 0xb8 0x1e 0x7c 0x89 0xc50x00007c10 <bogus+16>: 0xb9 0x0d 0x00 0xb8 0x01 0x13 0xbb 0x0c0x00007c18 <bogus+24>: 0x00 0xb2 0x00 0xcd 0x10 0xc3 0x48 0x650x00007c20 <bogus+32>: 0x6c 0x6c 0x6f 0x2c 0x20 0x77 0x6f 0x720x00007c28 <bogus+40>: 0x6c 0x64 0x21 0x00 0x00 0x00 0x00 0x000x00007c30 <bogus+48>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x000x00007c38 <bogus+56>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00<bochs:5> nNext at t=14041070(0) [0x000000007c02] 0000:7c02 (unk. ctxt): mov ds, ax; 8ed8<bochs:6> trace-reg onRegister-Tracing enabled for CPU0<bochs:7> nNext at t=14041071eax: 0x00000000 0ecx: 0x00090000 589824edx: 0x00000000 0ebx: 0x00000000 0esp: 0x0000ffd6 65494ebp: 0x00000000 0esi: 0x000e472c 935724edi: 0x0000ffac 65452eip: 0x00007c04eflags 0x00000082: id vip vif ac vm rf nt IOPL=0 of df if tf SF zf af pf cf(0) [0x000000007c04] 0000:7c04 (unk. ctxt): mov es, ax; 8ec0<bochs:8> c……

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章来源:

梦想从来不会选择人,它是上天赋予每个人构建未来蓝图的神奇画笔。

【从头开始写操作系统系列】使用 Bochs 调试操作系统

相关文章:

你感兴趣的文章:

标签云: