在DOS下的程序如果进入到保护模式正常的工具是无法调试的!(如td,debugger等!)而大家都知道Bochs可以的bochdbg具有调试系统的功能。用它来调试DOS下的小程序也是可以的!经过一番学习基本学会了调试方法:
准备阶段:
1.下载bochs的最新版本(网上可以下到,bochs是开源的哦~)
2.安装virtual PC,并在上面安装PC-DOS。PC-DOS有一个1.44MB的img文件!
3.对自己的程序进行修改。
在程序开始处加入如下代码:(这是NASM编译,需要MASM请自行更改)
jmpseg equ 40h ; 定义一个常量jmpseg ,其值等于40h,
mov ax,40h ;
mov ds,ax ;令这个常量40h为数据段
xor si,si
mov ax,[ds:si] ;
push ax ; 把这个数据段起始处第一个字节保存下来(压入堆栈)
mov byte [ds:si],0cbh ;改写这个位置的值为 retf
push cs ;向堆栈中压入retf返回后的段地址
push back ; 向堆栈中压入retf返回后的IP值
db 0eah ;以定义数据的形式在内存中定义jmp 0x40:0指令,
dw 0 ;远跳转到0x40:0处,这个地址中就是retf
dw jmpseg
back: ;执行retf后,返回,将弹出栈中的CS和IP,刚好来到
pop ax ; 标号back处
mov [ds:si],ax ;再恢复0x40:0处原来的值,
4.将IMG文件设置为DOS的软驱。将自己需要调试的程序放到DOS的共享文件夹下(virtual PC 2007设置DOS共享文件夹有点麻烦建议大家用virtual PC 5)然后把程序拷贝到IMG文件
COPY Z:/TEST.COM A:/ (假设我的需要调试程序为TEST.COM)
Bochs配置阶段:
安装bochs时有一个选项为安装liunix Demo选择安装
在D:/Program Files/Bochs-2.4.1/dlxlinux目录下将hd10meg.img删除
在准备阶段做好的IMG文件复制到该目录下,并重新命名为hd10meg.img
将RUN.BAT里的内容改为:
cd "d:/Program Files/Bochs-2.4.1/dlxlinux"
../bochsdbg-q -f bochsrc.bxrc
(因为bochsdbg才具有调试功能)
双击RUN.BAT启动调试
在<bochs:1>:处输入:VB 0X040:0
在<bochs:2>:处输入:C
然后系统会启动进入DOS,再DOS里执行自己的程序 TEST.COM
程序会停在0X040处
之后便可以像调试系统一样调试了。
命令大家可以上网查。