DEBUG的使用

(要在win32位习题下进行,win7 64位需要安装DosBox和debug这2个软件):

1:win64位下debug的使用教程:

下载debug.exe,这里我把debug放在了c盘根目录下

下载DosBox并安装好,

输入mount c c:\  加载目录到c盘

输入c:\  进入到c盘,看到我们已经在c盘下了。

输入debug,表示打开放在c盘下的debug工具,使用r命令,可以看到,我们进入了熟悉的debug环境。

汇编按esc退出程序 汇编退出debug_段地址

 

2:debug的基本命令:

R  查看以及改变CPU寄存器的内容

例如 r ax 修改ax 的内容

汇编按esc退出程序 汇编退出debug_段地址_02

D  查看内存中的内容

E 改写内存中的内容

U 将内存中的机器指令翻译成汇编指令

T 执行一条机器指令

A 以汇编指令的格式在内存中写入一条机器指令

quit 退出debug模式

 

3:实例讲解

1)将下面3条指令写入从2000:0开始的内存单元中,利用这2条指令计算2的8次方。

  mov ax,1

  add ax,ax

  jmp 2000:0003

(1): 说明2的8次方是256,也就是10000 0000(B)=256(十进制)=100(16进制),算到ax=0100时就是结果

注意:debug里面的数字都是16进制的

 

汇编按esc退出程序 汇编退出debug_汇编按esc退出程序_03

(2)然后修改cs的值为2000和ip的值为0

汇编按esc退出程序 汇编退出debug_段地址_04

可见此时的cs=2000,ip=0

(3)使用t命令单步执行:

 

汇编按esc退出程序 汇编退出debug_汇编按esc退出程序_05

 (4)注意:jmp 0003是跳转到2000:0003内存地址,然后在相加,然后在跳转,一直循环

 

汇编按esc退出程序 汇编退出debug_段地址_06

最后的结果,现在里面的只看ax,cs,ip

汇编按esc退出程序 汇编退出debug_汇编按esc退出程序_07

 

2)查看内存的内容,PC机主板上的ROM中写的一个生产日期,在内存FFF00H~~FFFFFH的某几个单元中,请找到生成日期并试图改变它。

解析:FFF00H是20位,有段地址和偏移地址合成,FFF0段地址,0偏移地址,FFFFFH有FFF0段地址和FF偏移地址

先修改CS为fff0,IP地址值位0

汇编按esc退出程序 汇编退出debug_汇编按esc退出程序_08

查看内存的范围fff0:0 ff

汇编按esc退出程序 汇编退出debug_ci_09

最右边部分是ascii的值是10进制的,中间的是16进制的,通过ascii表可查,十进制30是对应的ascii值是0(30(H)-->48(十进制),48对应的ascii是0),以此类推可得

日期是92年1月1日。

下面尝试修改日期,e命令是改写内存的东西

汇编按esc退出程序 汇编退出debug_汇编按esc退出程序_10

 

但是日期并没有改变,因为是主板上的ROM是只读存储器,不能修改

 

3)向内存从B8100H开始的单元中填写数据

  e B810:0000 01 01 02 02 03 03 04 04 

汇编按esc退出程序 汇编退出debug_16进制_11

可以看到上面出现了小图标,这是因为B810是显存的地址,修改显存的地址改变在屏幕上显示。