使用 Bochs 调试操作系统

来源:互联网 发布:织梦cms标签调用 编辑:程序博客网 时间:2024/05/23 23:30

编译安装 Bochs

  • 下载 bochs 源码

http://sourceforge.net/projects/bochs/files/bochs/2.6.8/

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

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

  • 编译安装

sudo make

sudo make install

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

用 Bochs 调试操作系统

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

image

部分 Bochs 调试指令

行为指令举例在某物理地址设置断点b addrb 0x7c00显示当前所有断点信息info breakinfo break继续执行,直至遇到断点cc单步执行ss单步执行(遇到函数跳过)nn查看寄存器信息info cpu
r
fp
sreg
creginfo cpu
r
fp
sreg
cre查看堆栈print-stackprint-stack查看内存物理地址内容xp /nuf addrxp /40bx 0x9013e查看线性地址内容x /nuf addrx /40bx 0x13e反汇编一段内存u start endu 0x30400 0x3040d反汇编执行的每一条指令trace-ontrace-on每执行一条指令就打印 CPU 信息trace-regtrace-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……


0 0