调试实模式转保护模式心得
来源:互联网 发布:张宝全 知乎 编辑:程序博客网 时间:2024/05/21 10:25
这几天为找如何调试实模式跳转保护模式的调试器,找的发狂~!~
1.用TD调试,发现调试到Cr0时TD就会死掉,经查阅TD无法调试保护模式的程序,我就纠结了难道就没调试保护模式的调试器,Debug,OD等肯定不行了......(SoftICE和Windbg没有测试过,据说可行)真不敢想当时的Windows和Linux是如何写成的,估计他们在之前或许已经写了个调试器给自己用,只是没给我们这些人用,没办法,最后发现Bochs这款开源调试器,才开始没注意,最后发现It‘s so crazy!本着参考无数网上的解答和个人实际的调试将方式小结了下。
2.用Bochs调试心得
工具准备:
下载最新的Bochs
http://bochs.sourceforge.net/
下载最新的Winimage
http://www.winimage.com/download.htm
本人自己用的NASM,这里是下载地址
http://www.nasm.us/
Dos6.22的镜像文件
http://doshome.com/soft/SoftView/SoftView_23.html
调试步骤:
1.配置Bochs,可以看Bochs里的bochsrc-sample.txt配置自己个性化的rxrc
具体Bochs for Windows如何配置这边就略过了~~两点提一下:
romimage: file=$BXSHARE/BIOS-bochs-latest#, address=0xf0000(Bochs版本在2.3.5以前使用的BIOS-bochs-latest是64k的,那个时候需要加上#号后面的地址,而2.3.5以后的需要把它引掉,我也有段时间纠结这个,纠结了半天,为什么不能运行?原来这边问题呵呵~~)
floppya: 1_44=DOS6.22.img, status=inserted,这边改为你要加载的系统镜像文件,我用的是DOS6.22.img你也可以选择其他的进行系统引导。
在.COM程序的开始出加入jmp $,我开始打算设置个INT 3在程序开始出,发现Bochs根本不理会我这个断点中断,而他自带的CTRL+C却能执行断点中断,请高手告知一解。。。。。。
2.用Winimage加载后缀为.COM的内核程序加载入Dos6.22.img的软盘镜像中,然后保存。
3.打开CMD,敲入E:/Progra~2/Bochs-~1.1/bochsdbg.exe -q -f bochsrc.bxrc,我用的是Bochs2.1.1版的,根目录在E盘下,用Bochs自带的Bochsdbg.exe调试程序装载你自己的内核程序,出现如下图所示的界面:
输入C执行到断点,但我们这边没有断点,在它的主界面出现了如下图所示的Dos安装界面:
选择5.NONE就进入了DOS的命令行。。输入你的.COM文件然后执行回车,如下图
同时命令行的界面已经假死,因为一直在执行jmp $指令,需要强制执行CTRL+C来迫使回到命令行界面,如下图
发现没有?倒数第二行就是一个无限的死循环,Bochs模拟的CPU一直在执行这条指令,也就意味着我们已经找到我们程序的入口点,那如何继续下面的单步调试呢?答案就是修改EIP,什么?微机老师不是说EIP不是不可读不可写嘛。。。呵呵。。因为这边Bochs是用纯软件模拟真实硬件系统,那我们很明显可以软修改EIP的值,怎么修改?用set$eip=0x37A修改EIP的指针的值,使其指向下一条指令,然后我们用info r查看一下我们的EIP的值是否被修改的,如下图:
果然,EIP的值已经变成0x37a,也就意味着我们可以单步调试我们的内核程序了。。。。。呵呵~~~
下图是我执行加载GDT和修改CR0的PE位使CPU进入PM模式。。。。。
总结:
可能还有很多调试的方法,这种可能比较BT但也比较好用,最主要是INT 3无法在Bochs中断下来,请高手解惑~
- 调试实模式转保护模式心得
- 实模式保护模式
- 实模式&&&保护模式
- 保护模式,实模式
- 实模式,保护模式
- 保护模式实模式跳转之迷-调试
- 实模式,保护模式,虚拟保护模式
- bochs调试保护模式程序
- 实模式与保护模式(转)
- 【转】实模式和保护模式
- 转 保护模式 与 实模式
- 实模式与保护模式
- 实模式和保护模式
- 保护模式和实模式
- 实模式与保护模式
- 实模式和保护模式
- 实模式和保护模式
- 保护模式 VS 实模式
- 写得蛮好的linux学习笔记
- JAVA中的细节
- 你读到第几句时会心痛?
- Axis1.4自带SOAPMonitor的配置
- ext整合fckeditor
- 调试实模式转保护模式心得
- 春季要健康“排毒”三步走
- 上海第二工业大学
- java 简单排序算法 冒泡法和选择法 的实现
- 用独立服务器的站长常犯的错误
- Loadable Kernel Modules 注射
- 把WTL移植到了Mingw里
- Course_Student_SchoolClass(Day14)
- RS-232