debug的使用
Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具,使用它,可以查看CPU各种寄存器的内容,内存情况可机器码级跟踪程序的运行。
实验中用到的debug功能:
- -r 查看、改变CPU寄存器的内容
- -d 查看内存中的内容
- -e 改写内存中的内容
- -u 将内存中的机器指令翻译成汇编指令
- -t 执行一条机器指令
- -a 已汇编指令的格式在内存中写入一条机器指令
注意:windows 7 以后就不提供带有debug的commond工具了,这里实验使用MS-DOS虚拟机完成实验。
① 用R查看、改变CPU寄存器的内容
注意CS和IP的值,CS=0CA2,IP = 0100, 也就是说,内存0CA2:0100处的指令为当前CPU要读取执行的指令。下方还可以看到其对应的机器码与汇编指令。
② 用R改变寄存器中的内容
③ 用D来查看内存中的内容
使用“d 段地址:偏移地址”的格式命令将列出从指定单元开始的128个内存单元的内容。 使用“ f ”表示列出一行。
结果显示中,左边的为内存地址,中间为地址对应的值,右边为该值对应的ASCII码。
在使用“d 段地址:偏移地址”的格式命令后,接着使用D命令,可列出后续的内容。
④ 用debug的E来改写内存中的值
可以写入数字、字符和字符串,在右边可以看到写入的字符与字符串。
⑤ 用E命令向内存中写入机器码,用U命令查看机器码的含义,用T命令执行内存中的机器码
在执行机器码之前,需要修改CS和IP的值,使其指向当前代码的起始内存位置。
⑥ 用A命令以汇编指令的形式在内存中写入机器指令
最后,做一个有趣的实验,向内存块B810:0000写入:
仔细观察,屏幕上某些地方显示了一些奇怪的字符。这是怎么回事呢?留作大家思考。