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

举报
远航 | FIBOS 发表于 2020/11/28 23:29:19 2020/11/28
【摘要】 在上一篇文章《环境搭建以及第一个Hello-World》中,笔者讲了如何安装 bochs 以及运行一个 helloworld 操作系统,但是使用上一篇文章中的方法安装的 bochs 是不支持调试的,下面我讲介绍如何使用源码编译的方法来安装 bochs,以及使用 bochs 来调试操作系统。 编译安装 Bochs 下载 bochs 源码 http://so...

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

编译安装 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 addr b 0x7c00
显示当前所有断点信息 info break info break
继续执行,直至遇到断点 c c
单步执行 s s
单步执行(遇到函数跳过) n n
查看寄存器信息 info cpu
r
fp
sreg
creg
info cpu
r
fp
sreg
cre
查看堆栈 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> c
00000003305i[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 0x02
0x00007c08 <bogus+ 8>: 0x00 0xeb 0xfe 0xb8 0x1e 0x7c 0x89 0xc5
0x00007c10 <bogus+ 16>: 0xb9 0x0d 0x00 0xb8 0x01 0x13 0xbb 0x0c
0x00007c18 <bogus+ 24>: 0x00 0xb2 0x00 0xcd 0x10 0xc3 0x48 0x65
0x00007c20 <bogus+ 32>: 0x6c 0x6c 0x6f 0x2c 0x20 0x77 0x6f 0x72
0x00007c28 <bogus+ 40>: 0x6c 0x64 0x21 0x00 0x00 0x00 0x00 0x00
0x00007c30 <bogus+ 48>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00007c38 <bogus+ 56>: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

<bochs:5> n
Next at t=14041070
(0) [0x000000007c02] 0000:7c02 (unk. ctxt): mov ds, ax ; 8ed8

<bochs:6> trace-reg on
Register-Tracing enabled for CPU0

<bochs:7> n
Next at t=14041071
eax: 0x00000000 0
ecx: 0x00090000 589824
edx: 0x00000000 0
ebx: 0x00000000 0
esp: 0x0000ffd6 65494
ebp: 0x00000000 0
esi: 0x000e472c 935724
edi: 0x0000ffac 65452
eip: 0x00007c04
eflags 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
……

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

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

文章来源:http://blog.luoyuanhang.com

文章来源: blog.csdn.net,作者:冰水比水冰,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/luoyhang003/article/details/47275279

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。