#Orange's 自制OS系列笔记(3)#调试操作系统


上一篇笔记提到当运行bochs虚拟机的时候:

bochs -f bochsrc

并不会直接运行,而是进入了调试状态,然后输入指令进行调试。



在上图中最后一行可以看到输入了指令“c”,  指令“c”的含义是“继续执行直到遇到断点"  . 实际这里可以输入很多指令,这篇笔记主要介绍使用bochs指令调试操作系统 ,常用指令见下图:

                                                             

接下来对每条指令进行解释。

b addr : 在某个断点处设置断点



上图中使用指令 b 0x7c00 在地址 0x7c00处设置了一个断点,这里实际就是我们程序的入口地址,引导扇区就是在这里开始执行的。

info break: 显示所有的断点信息



因为我们只在 7c00h 处设置了一个断点,所以执行指令 info break 只显示出了一个断点信息

c : 继续执行直到遇到断点 



因为我们只在 7c00h 处设置了断点,所以当运行到地址 7c00h 处的时候就会暂停,如上图所示,物理地址 0000:7c00 处对应的指令就是 mov ax , cs 

s: 单步执行



指令  mov ax , cs 后单步执行 mov ds , ax  等指令。

r: 查看寄存器信息



上图显示了一共17个寄存器的内容

print-stack: 打印当前堆栈的内容



上图中顶部是栈顶,为低地址,底部是栈底,为高地址,每行显示堆栈中两个字节的内容。

如 STACK 0xfff4 [0x0000] 表示堆栈地址 0xfff4 存储的字节内容为 0x0000

下面来看两条指令: 

xp   /nuf  addr :   查看内存物理地址内容                x   /nuf  addr :   查看线性地址内容

线性地址不是一个实际的地址,它会被cpu最终映射为物理地址。我们可以看到两条指令都可以选则 n,u,f三个参数。关于这三个参数的具体使用,可以使用 help x 指令查看。

n           显示的单元数 
u           每个显示单元的大小,u可以是下列之一: 
                    b BYTE 
                    h WORD 
                    w DWORD 
                    g DWORD64 
            注意: 这种命名法是按照GDB习惯的,而并不是按照inter的规范。 
f           显示格式,f可以是下列之一: 
                    x 按照十六进制显示 
                    d 十进制显示 
                    u 按照无符号十进制显示 
                    o 按照八进制显示 
                    t 按照二进制显示 
                    c 按照字符显示 

比如指令 xp /64bx  0xf000:0xe05b n = 64 , u = b , f = x . 即显示从物理地址fe05bh处开始的64个字节,每次显示1个字节,字节内以16进制显示,执行该条指令结果见下图: 



比如指令  x /64ho  0xf000:0xe05b :n = 64 , u = h , f = o . 即显示从线性地址 fe05bh 处开始的64个字节,每次显示2个字节,字节内容以8进制显示,执行该条指令结果见下图: 

 
u start end: 反汇编从地址start到地址end处的内存



u 0xf000:0xe05b 0xf000:0xe05f   表示对从地址fe05bhfe05fh的内存进行反汇编 。

trace-reg on : 每执行一条指令就显示cpu信息



从上图可以看出,当没有执行指令  trace-reg on 的时候,执行指令 s 的时候不会显示寄存器信息, 执行指令  trace-reg on 后,执行指令 s 会显示寄存器信息。

下一篇笔记写关于引导扇区的笔记。

该系列笔记也载于俺的个人网站:   http://zhangjinkun.com    , 欢迎访问。







#C++工程师#
全部评论

相关推荐

明天不下雨了:兄弟你是我今天看到的最好看的简历(我说的是简历风格跟简历书写)把985 211再搞亮一点。投boss就说;您好,我华科(985)研二在读,本科211。对您的岗位很感兴趣,希望能获得一次投递机会。
点赞 评论 收藏
分享
野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务