Bochs调试Linux内核初级入门2、bochs调试断点和单步指令、0x7c00、关中断和开中断指令 |
您所在的位置:网站首页 › c语言怎么单步运行 › 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,进入调试; 在停住,此时仿真屏幕是空的,什么也没显示; 此时应该是硬盘主引导记录装入内存,还未开始运行;一句指令也没执行; 主引导记录会存入内存地址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 清除方向 .......... 也是先关了中断,这点和前面是一样的; |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |