Bochs调试Linux内核初级入门2、bochs调试断点和单步指令、0x7c00、关中断和开中断指令

前文见此;

https://blog.csdn.net/bcbobo21cn/article/details/105314444

修改run.bat为:"C:\Program Files (x86)\Bochs-2.6.8\bochsdbg" -q -f bochsrc.bxrc;

然后run.bat,进入调试;

在<bochs:1>停住,此时仿真屏幕是空的,什么也没显示;

    此时应该是硬盘主引导记录装入内存,还未开始运行;一句指令也没执行;    主引导记录会存入内存地址0x7C00;

输入 vbreak 0x0000:0x7c00,打 c 继续执行;运行到0000:7c00,这里是一条cli指令;CLI指令,禁止中断发生;

同时仿真屏幕输出如下;

打 step 执行下一条指令看一下;这是一条jmp指令,屏幕没有变化;

再step,下一条指令是 mov ax, 0x07c0;

    0x07c0可能是等于0000:7c00,我还不是很清楚;我觉得应该是;   屏幕没有变化;

再往后单步,屏幕没有变化;

根据资料; 如下两句是设置数据段基地址;我还不清楚设置数据段基地址为0x07c0的意义;

    mov ax,0x07c0
    mov ds,ax

再往后单步,一直到如下图最后一条指令,屏幕没有变化;

既然有CLI指令,往后将能找到STI指令; STI,允许中断发生;到这里还没看到STI指令;

 

一些资料bochs调试的情况,0000:7c00处是如下的一条mov指令;跟这里前面不一样;我想可能是早一些的主引导记录情况,它没有关中断,直接mov ax, 0x7c0;前面的是先关了中断,再 mov ax, 0x7c0

        (0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, 0x7c0             ; b8c007

mov ax, 0x7c0 和 mov ax, 0x07c0,应该是一样的;

 

网上有个资料;主引导记录反汇编以后的内容如下;

    MBR(Main Boot Record)主引导记录区位于硬盘0磁道0柱面1扇区。

BEGIN:
0000:7C00 FA   CLI    关中断
0000:7C01 33C0   XOR AX,AX   设置堆栈段地址为0000
0000:7C03 8ED0   MOV SS,AX
0000:7C05 BC007C MOV SP,7C00   设置堆栈指针为7C00
0000:7C08 8BF4   MOV SI,SP   si=7c00
0000:7C0A 50   PUSH AX  
0000:7C0B 07   POP ES   ES=0000
0000:7C0C 50   PUSH AX  
0000:7C0D 1F   POP DS   DS=0000
0000:7C0E FB   STI    开中断
0000:7C0F FC   CLD    清除方向

..........

也是先关了中断,这点和前面是一样的;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值