您的位置:首页 > 其它

汇编语言学习-Dos下的调试工具debug的使用教程

2016-04-14 19:04 483 查看
                   本博文系列参考自<<汇编语言>>第三版,作者:王爽

Dubug是dos,windows下提供的调试工具,使用该工具,可以查看和修改寄存器,内存的内容。同时可以在机器码级别跟踪程序源码的运行。

1.常用的debug功能

(1)用Debug的R命令查看、改变CPU寄存器内容;

(2)用Debug的D命令查看内存中的内容;

(3)用Debug的E命令查看内存中的内容;

(4)用Debug的U命令将内存中机器指令翻译成汇编指令;

(5)用Debug的T命令执行一条机器指令;

(6)用Debug的A命令以汇编指令的格式在内存中写入一条机器指令;

2.进入debug工具

在开始中输入cmd,打开Dos命令行窗口,在命令行窗口输入debug即进入了debug工具。如下图所示:







3.R命令查看和改变寄存器内容

在debug工具中输入R命令,注意debug工具的命令不区分大小写,命令结果如图所示:



这里列出了CPU中所有寄存器的内容包括:AX,BX,CX,DX等,另外NV,VP,EI,PL等为标志寄存器,暂时不予理会。这里我们可以看到CS=1442H,IP=0100H,所以CPU即将执行指令的地址为1442:0100,另外在CS:IP地址后面还给出了即将执行指令的机器码为0000H,其对应的汇编指令为
ADD [BX+SI],AL

R指令还可以改变寄存器中的内容,改变方式为R 寄存器名字比如我们发现寄存器BX的值为0000H,我们要将其改变为0100H,那么具体操作如下图所示:



既然R可以改变寄存的内容,现在我们不妨尝试改变寄存器IP的值,这样想如果IP的值改变了那么CS:IP指向的指令也会发生变化,那么到底是不是这样呢,我们尝试下面的实验内容,将IP的内容改为0001H



改变之后发现CS:IP为1442:0001 其指向的机器码为20FFH 对应 的汇编指令为ADD BH,BH

4.D命令查看内存的内容

D命令查看内容的基本格式为:D 段地址:偏移地址
比如我们要查看内存为1000:0的内容,那么可以用如下操作,注意一次性可列出以1000:0位起始位置的128字节的内容



一共显示了8行,每行16个字节,左边为内存地址范围,中间为每个内存的内容(16进制表示),右边为对应的ASCII,不可显示的ASCII字符用.代替。注意我们每次看到的同一段内存的内容也许不一样,因为系统始终在运行,maybe我们查看的内存部分在查看后刚好又发生了改变。默认情况下进入Dubug工具中输入D命令会显示Debug默认内存地址的内容。

当需要查看指定内存区间的内容时可用使用表达式D 段地址:起始偏移地址 结束偏移地址
比如我要查看1000:0-1000:9这段内存地址的内容,那么可以表达成 D 1000:0 9 如下图所示:



如果我们只是想查看1000:0这一个内存地址的内容 可以表达成D 1000:0 0
实验结果如下:






4.E命令修改内存的内容


可以使用E命令改变内存中的内容,比如我想把1000:0-1000:9单元中的内容改为0,1,2,3,4,5,6,7,8,9 其格式为:

E 段地址:起始偏移地址 数据1 数据2.........





一个一个修改内存内容,直接输出E 段地址:偏移地址 然后通过空格一个一个修改,按enter完成修改:



也可通过E向内存写入字符:



其中'a' 'b' 'c'的ASCII码为 61 62 63

写入字符串:



5.E命令写入机器码,U命令将机器码转换为对应的汇编指令

写入机器码,比如下面的汇编指令对应的机器码:

机器码对应的汇编指令

b80100mov ax,0001

b90200mov cx,0002

01c8add ax,cx

实验结果如下如下:



不难看出U命令包括三个部分  左边为内存地址,其次为机器码  最右边机器码对应的汇编指令。

若要执行我们写入的命令,那么应该用到命令T,查看当前寄存器的值:



当前CS与IP的值分别为:CS=1442 IP=0100 要使得计算机执行我们写入的1000:0命令,需要将当前CS与IP改为CS=1000 IP=0000



此时不难看出CS:IP指向我们当前执行的指令。要想执行当前指令我们输入命令T



CS:IP指向mov cx,0002这条指令。

8 用命令A以汇编形式向内存中写入机器指令
之前我们已经用过可以使用命令E直接改写内存,但是这种方式不方便,这里我们使用汇编语言直接向内存中写入机器指令,如下图所示:



可以看到我们通过汇编形式写入的汇编指令,计算机已经翻译成了机器指令。

OK,debug工具的介绍教程已经到此结束,这虽然只是一个粗略的教程,但是工具的熟悉是要在我们日常使用中慢慢熟悉,so,学而时习之,共勉。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: