ImageVerifierCode 换一换
格式:PPT , 页数:39 ,大小:640KB ,
资源ID:7721547      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7721547.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第4章 DEBUG调试1.ppt)为本站会员(hyngb9260)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第4章 DEBUG调试1.ppt

1、第4章 DEBUG调试,主讲人:李瑞霞,DEBUG.EXE是Windows自带的用于调试可执行程序的一个工具软件,可在命令提示符下计入,同时也是进行汇编语言程序设计的一种最有效的调试工具。由于DEBUG调试程序可以对单条指令或几条指令组成指令序列进行汇编、执行,并可以观察到指令执行前后在寄存器或内存中的结果,并对指令中错误的使用予以拒绝汇编,对于初学指令的读者,通过DEBUG调试程序对指令的调试,不但对指令的功能,格式,影响FLAGS寄存器的状况有个直观的了解,还可以进一步了解数据在计算机中存放的格式、使用指令时应该注意的问题乃至计算机的工作原理。,4.1 DEBUG命令格式,4.1.1 DE

2、BUG调试程序的启动 4.1.2 DEBUG命令的格式,4.1.1 DEBUG调试程序的启动 在命令提示符下,可键入如下命令启动DEBUG调试程序:DEBUG 路径文件名 参数1 参数2路径文件名是供DEBUG调试程序调试的程序名称及路径。若Debug后不带文件名,仅运行Debug程序,在需要时,再用N和L命令调入被调试程序;若命令中带有被调试程序名,则运行Debug的同时,还将指定的程序调入主存;参数1参数2被调试程序所需要的参数。,“DEBUG 文件名”方式的调试方式 只启动DEBUG的调试方式 在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示

3、符此时就可用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,是由被调试的程序XIANS

4、HI.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调试程序时,不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器值都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100H;状态标志都是清0状态。如下图所示:,若

5、启动DEBUG调试程序时,被调试程序扩展名不是.EXE,则(BXCX)包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。如下图所示:,由图可见,被调试的程序名是XIANSHI.OBJ,在DEBUG调试程序提示符“”下键入R命令,显示当前CPU中所有寄存器的值,除(BXCX)00000216H为被调试的程序XIANSHI.OBJ的大小,其余和不带被调试程序的情况相同。,4.1.2 DEBUG命令的格式,Debug的命令都是一个字母,后跟一个或多个参数,即:字母参数。在使用DEBUG命令时应注意: (1)字母不分大小写,如A和a; (2)只使用16进制数,没有后缀字母H或h

6、; (3)分隔符(空格或逗号)只在两个数值之间是 必须的,命令和参数间可无分隔符 (4)每个命令及参数输入后必须按回车键后才有效,可以用Ctrl+Break中止命令的执行; (5)命令如果不符合Debug的规则,则将以“error”提示,并用“”指示错误位置。,(6)许多与内存单元有关的DEBUG命令的参数是内存物理地址,形式是“段地址:偏移地址”。其中。段地址可以是段寄存器名称或具体的数值;偏移地址是数值。如果不输入段地址,则采用默认值,可以是默认段寄存器值。如果没有提供偏移地址,则通常就是当前偏移地址。对内存单元操作的命令还支持地址范围这种参数,它的形式是“开始地址 结束地址”(结束地址不

7、能具有段地址),或者是“开始地址L字节长度”。,4.2 DEBUG命令,4.2.1、显示内存单元内容命令D(DUMP)4.2.2、修改命令E(Enter)4.2.3、填充命令F(Fill)4.2.4、寄存器命令R(Register)4.2.5、汇编命令A(Asemble)4.2.6、反汇编命令U(Unassemble)4.2.7、运行命令G(Go)4.2.8、跟踪命令T(Trace)4.2.9、继续命令P(Proceed)4.2.10、退出命令Q(Quit),4.2.1显示内存单元内容命令D(DUMP)D命令显示内存单元的内容,它的格式有以下两种: (1)D地址功能:显示当前或指定开始地址的内

8、存内容,如下图:由图可见,在DEBUG调试程序的提示符下,键入D命令,显示当前内存内容(若前面已有D命令,则接着上一次D命令显示的最后一个字节显示)。一个D命令一次显示连续816字节单元的内容,对于每一行,最左边部分0AF5:0100是内存物理地址,其中,0AF5H是数据段的段地址,0100H是该段的偏移地址;中间是连续16个字节的内存内容(16进制数,以字节为单位),右边部分是这个16个字节内容的ASCII字符显示,不可显示字符用点“.”示。在DEBUG调试程序的提示符下,键入D0000:0010命令,显示从物理地址为0000H:0010H字节单元开始的连续816字节单元的内容,其余情况同D

9、命令。,(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个)个字节单元的内容。,4.2.2修改命令E(Ente

10、r)E命令用于修改内存单元的内容,它有两种格式: (1)E地址功能:逐个单元相继修改指定地址的内容,如图所示:由图可见,在DEBUG调试程序的提示符下,键入EDS:0100命令,DEBUG显示对应字节单元的内容,紧接着光标闪烁,提示用户可以直接输入新数据,然后按空格键显示下一个单元的内容,或者按“”键显示上一个单元的内容;不需要修改可以直接按空格或“”键;这样,用户可以不断修改相继单元的内容,直到用回车键结束该命令为止。在上图中一共修改了16个字节单元的内容,均改为0FFH,然后我们再用D命令查看,前16个字节均已被修改为0FFH。,(2)E地址 数据表功能:用数据表的数据修改指定地址的内容,

11、可以一次修改多个单元。如图所示:,由图可见,在DEBUG调试程序的提示符下,先键入D0100命令,查看对应内存单元的内容,然后用E命令修改前8个字节单元的内容,分别修改为00H,01H,02H,03H,04H,05H,06H,07H,再用D命令查看,前8个字节单元已被修改为数据表的内容。,4.2.3、填充命令F(Fill) F命令用于对一个内存区域填写内容,同时改写原来的内容,其格式为: F 范围 数据表 功能:用数据表的数据写入指定范围的内存。如果数据个数超过指定的范围,则忽略多出的项;如果数据个数小于指定的范围,则重复使用这些数据,直到填满指定范围。如图所示:由图可见,在DEBUG调试程序

12、的提示符下,先键入D0100 012F命令,查看指定范围的内存单元的内容,然后用F命令向指定范围的字节单元写入数据表的内容,数据表的内容为00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,再用D命令查看指定范围的内存单元,由于数据表的内容小于指定的范围,所以第2、3行重复数据表的内容。,4.2.4、寄存器命令R(Register) R命令用于显示和修改处理器的寄存器,它有三种格式: ()R 功能:显示所以寄存器内容和标志位状态,如图所示:由图可见,在DEBUG调试程序的提示符下,键入R命令,显示所以寄存器内容和标志位

13、状态,前两行给出所有寄存器的值,包括各个标志状态。最后一行给出了当前CS :IP 处的指令,由于这是一个涉及数据的指令,这一行的最后还给出了相应单元的内容。,(2)R寄存器名称 功能:显示和修改指定的寄存器,如图所示:由图可见,在DEBUG调试程序的提示符下,键入RAX命令,显示AX寄存器内容为0000H,并回车换行,显示“”,并紧接着光标闪烁,提示可以输入新的内容,键入1200,即将AX寄存器的内容由0000H修改为 1200H,依此类推,显示并修改CX寄存器,最后,键入R命令,显示所有寄存器的内容,发现AX和CX的内容确实已按要求修改了。,(3)RF功能:显示和修改FLAGS寄存器的OF,

14、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 CY,4.2.5、汇编命令A(Asemble)A命令用于汇编指令,即将输入的指令汇编成对应的机器

15、语言,存入指定的内存区域,它有两种格式:(1)A(2)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处汇编起,依次类推,其汇编成的机器语言可用反

16、汇编U命令查看,中间部分即是对应的机器语言。,(2)A地址 功能:从指定地址开始汇编指令,如图所示:,4.2.6、反汇编命令U(Unassemble) U命令用于反汇编,即显示指定内存单元中的机器语言及其对应的指令。它有两种格式。(1)U地址(2)U范围,(1)U地址 功能:从指定地址开始,反汇编32个字节(80列显示模式)。U命令中如果没有指定地址,则接着上一个U命令的最后单元开始;若还没有使用U 命令,则从当前CS:IP开始。如图所示:由图可见,调试可执行文件XIANSHI.EXE,键入U命令,DEBUG调试程序对可执行文件XIANSHI.EXE进行反汇编,从当前的CS:IP开始,即从0B

17、60H:0000H开始 .,(2)U范围 功能: 对指定范围的内存单元内容进行反汇编,如图示。,4.2.7、运行命令G(Go)G命令用来连续执行指令,它的格式为: G=地址断点地址1,断点地址2,断点地址10功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。然后停止执行,并显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令,以便观察程序运行到此的情况。如图所示:,由图可见,DEBUG调试程序调试的是可执行文件XIANSHI.EXE,键入U命令,DEBUG调试程序对可执行文件XIANSHI.EXE进行反汇编,键入G=0005 0009命令,从MOV AH,01H指令执行到CM

18、P AL,00H为止(CMP AL,00H指令本身不执行),执行的结果是光标闪烁,提示输入一个字符(这段指令的功能就是从键盘输入一个字符,并回显,输入字符的ASCII码存入AL寄存器中),我们输入字符5,然后DEBUG调试程序显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令;接着键入G0017命令,从当前的CS:IP(0B5CH:0009)开始运行一直到0017H这个断点,然后DEBUG调试程序显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令。 可见,G命令等号后的地址指定程序段运行的起始地址,如不指定则从当前的CS:IP 开始运行。断点地址如果只有偏移地址,则默认是代码段

19、CS;断点可以没有,但最多只能有10 个。,4.2.8、跟踪命令T(Trace)T命令也称为单步命令,它提供了一种逐条指令运行程序的方法,它的格式有两种:(1)T=地址 (2)T=地址数值,(1)T=地址功能:从指定地址起执行一条指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行,即逐条指令跟踪。如图所示:,由图可见,在DEBUG调试程序的提示符下,键入A命令,汇编指令序列MOV AX,1234HMOV BX,5678HADD AX,BXMOV CX,BXSUB AX,CX接着键入T=0100命令,执行0100H所在的一条指令MO

20、V AX, 1234H停下来,然后显示所有寄存器和标志位的值以及下一条指令;接着键入T命令,没有指定地址,于是就从当前的CS:IP开始执行,执行一条指令MOV BX, 5678H后停下来,并显示所有寄存器和标志位的值以及下一条指令;依次类推。,(2)T=地址数值功能:从指定地址起执行数值参数指定条数的指令后停下来,每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令。如未指定地址则从当前的CS:IP开始执行。即多条指令跟踪。如图所示:,由图可见,在DEBUG调试程序的提示符下,键入A命令,汇编指令序列MOV AX,1234HMOV BX,5678HADD AX,BXMOV CX,BXSU

21、B AX,CX 接着键入T=0100 5命令,执行0100H开始的5条指令停下来,然后显示所有寄存器和标志位的值以及下一条指令。 T跟踪命令提供了一种逐条指令运行程序的方法, 使程序员可以细致地观察程序每一步执行情况情况,因此它也成被称为单步命令。命令的另一个优点是在遇到循环指令(LOOP)、子程序(CALL)或中断调用(INT n)指令时,也会进入到子程序或中断服务程序当中执行,这一点和下面介绍的P命令有所不同。,4.2.9、继续命令P(Proceed) 格式:P=地址数值 功能:P 命令类似T命令,只是不会进入循环指令、子程序或中断服务程序中。当不需要调试循环指令、子程序或中断服务程序时,要应用P 命令,而不是T命令。如图4-22和图4-23所示: 由图4-22和图4-23可以看出P命令和T命令的区别。,4.2.10、退出命令Q(Quit) 格式:Q 功能:Q 命令使Debug程序退出,返回DOS 。Q命令并无存盘功能,可使用W命令存盘。如图所示:,除此之外, DEBUG调试程序还有命名命令N(Name)、装入命令L(Load)、写盘命令W(Write)、比较命令C(Compare)、16进制数计算命令H(Hex)、输入命令I(Input)、输出命令O(Output)、传送命令M(Move)、查找命令S(Search),谢谢!,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报