debug调试.doc_第1页
debug调试.doc_第2页
debug调试.doc_第3页
debug调试.doc_第4页
debug调试.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DEBUG调试DEBUG.EXE是Windows自带的用于调试可执行程序的一个工具软件,可在命令提示符下计入,同时也是进行汇编语言程序设计的一种最有效的调试工具。由于DEBUG调试程序可以对单条指令或几条指令组成指令序列进行汇编、执行,并可以观察到指令执行前后在寄存器或内存中的结果,并对指令中错误的使用予以拒绝汇编,对于初学指令的读者,通过DEBUG调试程序对指令的调试,不但对指令的功能,格式,影响FLAGS寄存器的状况有个直观的了解,还可以进一步了解数据在计算机中存放的格式、使用指令时应该注意的问题乃至计算机的工作原理。1 DEBUG命令格式1.1 DEBUG调试程序的启动在命令提示符下,可键入如下命令启动DEBUG调试程序: DEBUG 路径文件名 参数1 参数2路径文件名是供DEBUG调试程序调试的程序名称及路径。若Debug后不带文件名,仅运行Debug程序,在需要时,再用N和L命令调入被调试程序;若命令中带有被调试程序名,则运行Debug的同时,还将指定的程序调入主存;参数1参数2被调试程序所需要的参数。“DEBUG 文件名”方式的调试方式 只启动DEBUG的调试方式 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符,此时就可用Debug来调试程序。若启动DEBUG调试程序时,被调试程序扩展名是.EXE,则需要重新定位。此时,CS:IP和SS:SP根据被调试程序确定,分别指向代码段和堆栈段。DS=ES指向当前可用的主存段,BXCX包含被调试文件大小字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。如上图所示,被调试的程序名是XIANSHI.EXE,在DEBUG调试程序提示符“”下键入R命令,是显示当前CPU中所有寄存器的值,可见,CS:IP0B60H:0000H(DEBUG调试程序中所有的数据均为十六进制,但不加尾标H),SS:SP0B4BH:0000H,是由被调试的程序XIANSHI.EXE决定的,分别指向代码段和堆栈段。DS=ES=0B3BH,BXCX=000001A4H,表示被调试的文件XIANSHI.EXE的大小是000001A4H字节,其它寄存器均为0,而 NV UP EI PL NZ NA PO NC 表示FLAGS寄存器的OF=0,DF=0,IF=0 ,SF=0 ,ZF=0, AF=0, PF=0 ,CF=0。 Debug的命令都是一个字母,后跟一个或多个参数,即:字母参数。标志位的符号表示如下表所示:标志位代表1的符号代表0的符号OFOVNVDFDNUPIFEIDISFNGPLZFZRNZAFACNAPFPEPOCFCYNC若启动DEBUG调试程序时,不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器值都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100H;状态标志都是清0状态。如下图所示:若启动DEBUG调试程序时,被调试程序扩展名不是.EXE,则(BXCX)包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。如下图所示:由图可见,被调试的程序名是XIANSHI.OBJ,在DEBUG调试程序提示符“”下键入R命令,显示当前CPU中所有寄存器的值,除(BXCX)00000216H为被调试的程序XIANSHI.OBJ的大小,其余和不带被调试程序的情况相同。1.2 DEBUG命令的格式 在使用DEBUG命令时应注意:(1)字母不分大小写,如A和a;(2)只使用16进制数,没有后缀字母H或h;(3)分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符(4)每个命令及参数输入后必须按回车键后才有效,可以用Ctrl+Break中止命令的执行;(5)命令如果不符合Debug的规则,则将以“error”提示,并用“”指示错误位置。(6)许多与内存单元有关的DEBUG命令的参数是内存物理地址,形式是“段地址:偏移地址”。其中。段地址可以是段寄存器名称或具体的数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是默认段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。对内存单元操作的命令还支持地址范围这种参数,它的形式是“开始地址 结束地址”(结束地址不能具有段地址),或者是“开始地址L字节长度”。2 常用DEBUG命令2.1、显示内存单元内容命令D(DUMP)2.2、修改命令E(Enter)2.3、填充命令F(Fill)2.4、寄存器命令R(Register)2.5、汇编命令A(Asemble)2.6、反汇编命令U(Unassemble)2.7、运行命令G(Go)2.8、跟踪命令T(Trace)2.9、继续命令P(Proceed)2.10、退出命令Q(Quit)1显示内存单元内容命令D(DUMP) D命令显示内存单元的内容,它的格式有以下两种:(1)D地址功能:显示当前或指定开始地址的内存内容,如下图:由图可见,在DEBUG调试程序的提示符下,键入D命令,显示当前内存内容(若前面已有D命令,则接着上一次D命令显示的最后一个字节显示)。一个D命令一次显示连续816字节单元的内容,对于每一行,最左边部分0AF5:0100是内存物理地址,其中,0AF5H是数据段的段地址,0100H是该段的偏移地址;中间是连续16个字节的内存内容(16进制数,以字节为单位),右边部分是这个16个字节内容的ASCII字符显示,不可显示字符用点“.”示。在DEBUG调试程序的提示符下,键入D0000:0010命令,显示从物理地址为0000H:0010H字节单元开始的连续816字节单元的内容,其余情况同D命令。(2)D范围功能:显示指定范围的主存内容,如图所示:由图可见,在DEBUG调试程序的提示符下,键入D0000:0010 0026命令,显示从物理地址为0000H:0010H到物理地址为 0000H:0026H共23个字节单元的内容;在DEBUG调试程序的提示符下,键入DDS:0100 011F命令,显示从数据段偏移地址为0100H(物理地址为(DS):0100H)到数据段偏移地址为011FH共32个字节单元的内容;在DEBUG调试程序的提示符下,键入D0100 L 20命令,显示从从数据段偏移地址为0100H开始连续20H(32个)个字节单元的内容。2修改命令E(Enter) E命令用于修改内存单元的内容,它有两种格式:(1)E地址 功能:逐个单元相继修改指定地址的内容,如图所示: 由图可见,在DEBUG调试程序的提示符下,键入EDS:0100命令,DEBUG显示对应字节单元的内容,紧接着光标闪烁,提示用户可以直接输入新数据,然后按空格键显示下一个单元的内容,或者按“”键显示上一个单元的内容;不需要修改可以直接按空格或“”键;这样,用户可以不断修改相继单元的内容,直到用回车键结束该命令为止。在上图中一共修改了16个字节单元的内容,均改为0FFH,然后我们再用D命令查看,前16个字节均已被修改为0FFH。(2)E地址 数据表功能:用数据表的数据修改指定地址的内容,可以一次修改多个单元。如图所示:由图可见,在DEBUG调试程序的提示符下,先键入D0100命令,查看对应内存单元的内容,然后用E命令修改前8个字节单元的内容,分别修改为00H,01H,02H,03H,04H,05H,06H,07H,再用D命令查看,前8个字节单元已被修改为数据表的内容。3、填充命令F(Fill)F命令用于对一个内存区域填写内容,同时改写原来的内容,其格式为: F 范围 数据表功能:用数据表的数据写入指定范围的内存。如果数据个数超过指定的范围,则忽略多出的项;如果数据个数小于指定的范围,则重复使用这些数据,直到填满指定范围。如图所示:由图可见,在DEBUG调试程序的提示符下,先键入D0100 012F命令,查看指定范围的内存单元的内容,然后用F命令向指定范围的字节单元写入数据表的内容,数据表的内容为00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,再用D命令查看指定范围的内存单元,由于数据表的内容小于指定的范围,所以第2、3行重复数据表的内容。4、寄存器命令R(Register)R命令用于显示和修改处理器的寄存器,它有三种格式:()R功能:显示所有寄存器内容、标志位状态及下一条要执行的指令,如图所示:由图可见,在DEBUG调试程序的提示符下,键入R命令,显示所有寄存器内容和标志位状态,前两行给出所有寄存器的值,包括各个标志状态。最后一行给出了当前CS :IP 处的指令,由于这是一个涉及数据的指令,这一行的最后还给出了相应单元的内容。(2)R寄存器名称功能:显示和修改指定的寄存器,如图所示: 由图可见,在DEBUG调试程序的提示符下,键入RAX命令,显示AX寄存器内容为0000H,并回车换行,显示“”,并紧接着光标闪烁,提示可以输入新的内容,键入1200,即将AX寄存器的内容由0000H修改为 1200H,依此类推,显示并修改CX寄存器,最后,键入R命令,显示所有寄存器的内容,发现AX和CX的内容确实已按要求修改了。(3)RF功能:显示和修改FLAGS寄存器的OF,DF,IF ,SF ,ZF, AF, PF ,CF位。如图所示: 由图可见,在DEBUG调试程序的提示符下,键入RF命令,显示FLAGS寄存器的OF,DF,IF ,SF ,ZF, AF, PF ,CF位的情况为NV UP EI PL NZ NA PO NC 紧接着光标闪烁,提示可以键入新的内容予以修改,键入OV DN DI NG ZR AC PE CY,再键入R命令,可以看出FLAGS寄存器的OF,DF,IF ,SF ,ZF, AF, PF ,CF位已经修改为OV DN DI NG ZR AC PE CY5、汇编命令A(Asemble)A命令用于汇编指令,即将输入的指令汇编成对应的机器语言,存入指定的内存区域,它有两种格式:(1)A功能:若还没有使用过A命令,则从当前CS:IP开始汇编指令,若已使用过A命令,接着上一个A命令的最后一个单元开始汇编指令。DEBUG调试程序将他们汇编成机器代码,相继地存放在指定地址开始的存储区中,最后要输入一个回车结束A命令。如图所示: 由图可见,在DEBUG调试程序的提示符下,键入A命令,DEBUG调试程序显示0AF3:0100,这是当前的CS:IP值,接着输入MOV AX,1234指令,该指令被汇编成机器语言,共3个字节,所以下一条指令MOV BX,5678从0AF3:0103处汇编起,依次类推,其汇编成的机器语言可用反汇编U命令查看,中间部分即是对应的机器语言。(2)A地址功能:从指定地址开始汇编指令,如图所示:6、反汇编命令U(Unassemble)U命令用于反汇编,即显示指定内存单元中的机器语言及其对应的指令。它有两种格式。(1)U地址功能:从指定地址开始,反汇编32个字节(80列显示模式)。U命令中如果没有指定地址,则接着上一个U命令的最后单元开始;若还没有使用U 命令,则从当前CS:IP开始。如图所示:由图可见,调试可执行文件XIANSHI.EXE,键入U命令,DEBUG调试程序对可执行文件XIANSHI.EXE进行反汇编,从当前的CS:IP开始,即从0B60H:0000H开始 .(2)U范围功能:对指定范围的内存单元内容进行反汇编,如图示。7、运行命令G(Go)G命令用来连续执行指令,它的格式为: G=地址断点地址1,断点地址2,断点地址10功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。然后停止执行,并显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令,以便观察程序运行到此的情况。如图所示:由图可见,DEBUG调试程序调试的是可执行文件XIANSHI.EXE,键入U命令,DEBUG调试程序对可执行文件XIANSHI.EXE进行反汇编,键入G=0005 0009命令,从MOV AH,01H指令执行到CMP AL,00H为止(CMP AL,00H指令本身不执行),执行的结果是光标闪烁,提示输入一个字符(这段指令的功能就是从键盘输入一个字符,并回显,输入字符的ASCII码存入AL寄存器中),我们输入字符5,然后DEBUG调试程序显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令;接着键入G0017命令,从当前的CS:IP(0B5CH:0009)开始运行一直到0017H这个断点,然后DEBUG调试程序显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令。可见,G命令等号后的地址指定程序段运行的起始地址,如不指定则从当前的CS:IP 开始运行。断点地址如果只有偏移地址,则默认是代码段CS;断点可以没有,但最多只能有10 个。8、跟踪命令T(Trace)T命令也称为单步命令,它提供了一种逐条指令运行程序的方法,它的格式有两种:(1)T=地址功能:从指定地址起执行一条指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行,即逐条指令跟踪。如图所示:由图可见,在DEBUG调试程序的提示符下,键入A命令,汇编指令序列 MOV AX,1234H MOV BX,5678H ADD AX,BX MOV CX,BX SUB AX,CX接着键入T=0100命令,执行0100H所在的一条指令MOV AX,1234H停下来,然后显示所有寄存器和标志位的值以及下一条指令;接着键入T命令,没有指定地址,于是就从当前的CS:IP开始执行,执行一条指令MOVBX, 5678H后停下来,并显示所有寄存器和标志位的值以及下一条指令;依次类推。(2)T=地址数值 功能:从指定地址起执行数值参数指定条数的指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行。即多条指令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论