第4章 DEBUG调试1.ppt_第1页
第4章 DEBUG调试1.ppt_第2页
第4章 DEBUG调试1.ppt_第3页
第4章 DEBUG调试1.ppt_第4页
第4章 DEBUG调试1.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第4章DEBUG调试 主讲人 李瑞霞 DEBUG EXE是Windows自带的用于调试可执行程序的一个工具软件 可在命令提示符下计入 同时也是进行汇编语言程序设计的一种最有效的调试工具 由于DEBUG调试程序可以对单条指令或几条指令组成指令序列进行汇编 执行 并可以观察到指令执行前后在寄存器或内存中的结果 并对指令中错误的使用予以拒绝汇编 对于初学指令的读者 通过DEBUG调试程序对指令的调试 不但对指令的功能 格式 影响FLAGS寄存器的状况有个直观的了解 还可以进一步了解数据在计算机中存放的格式 使用指令时应该注意的问题乃至计算机的工作原理 4 1DEBUG命令格式 4 1 1DEBUG调试程序的启动4 1 2DEBUG命令的格式 4 1 1DEBUG调试程序的启动在命令提示符下 可键入如下命令启动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 IP 0B60H 0000H DEBUG调试程序中所有的数据均为十六进制 但不加尾标H SS SP 0B4BH 0000H 是由被调试的程序XIANSHI EXE决定的 分别指向代码段和堆栈段 DS ES 0B3BH BXCX 000001A4H 表示被调试的文件XIANSHI EXE的大小是000001A4H字节 其它寄存器均为0 而NVUPEIPLNZNAPONC表示FLAGS寄存器的OF 0 DF 0 IF 0 SF 0 ZF 0 AF 0 PF 0 CF 0 标志位的符号表示如下表所示 若启动DEBUG调试程序时 不带被调试程序 则所有段寄存器值相等 都指向当前可用的主存段 除SP之外的通用寄存器值都设置为0 而SP指示当前堆栈顶在这个段的尾部 IP 0100H 状态标志都是清0状态 如下图所示 若启动DEBUG调试程序时 被调试程序扩展名不是 EXE 则 BX CX 包含被调试文件大小的字节数 BX为高16位 其他同不带被调试程序的情况 如下图所示 由图可见 被调试的程序名是XIANSHI OBJ 在DEBUG调试程序提示符 下键入R命令 显示当前CPU中所有寄存器的值 除 BX CX 00000216H为被调试的程序XIANSHI OBJ的大小 其余和不带被调试程序的情况相同 4 1 2DEBUG命令的格式 Debug的命令都是一个字母 后跟一个或多个参数 即 字母 参数 在使用DEBUG命令时应注意 1 字母不分大小写 如A和a 2 只使用16进制数 没有后缀字母H或h 3 分隔符 空格或逗号 只在两个数值之间是必须的 命令和参数间可无分隔符 4 每个命令及参数输入后必须按回车键后才有效 可以用Ctrl Break中止命令的执行 5 命令如果不符合Debug的规则 则将以 error 提示 并用 指示错误位置 6 许多与内存单元有关的DEBUG命令的参数是内存物理地址 形式是 段地址 偏移地址 其中 段地址可以是段寄存器名称或具体的数值 偏移地址是数值 如果不输入段地址 则采用默认值 可以是默认段寄存器值 如果没有提供偏移地址 则通常就是当前偏移地址 对内存单元操作的命令还支持地址范围这种参数 它的形式是 开始地址结束地址 结束地址不能具有段地址 或者是 开始地址L字节长度 4 2DEBUG命令 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地址功能 显示当前或指定开始地址的内存内容 如下图 由图可见 在DEBUG调试程序的提示符下 键入D命令 显示当前内存内容 若前面已有D命令 则接着上一次D命令显示的最后一个字节显示 一个D命令一次显示连续8 16字节单元的内容 对于每一行 最左边部分0AF5 0100是内存物理地址 其中 0AF5H是数据段的段地址 0100H是该段的偏移地址 中间是连续16个字节的内存内容 16进制数 以字节为单位 右边部分是这个16个字节内容的ASCII字符显示 不可显示字符用点 示 在DEBUG调试程序的提示符下 键入D0000 0010命令 显示从物理地址为0000H 0010H字节单元开始的连续8 16字节单元的内容 其余情况同D命令 2 D范围功能 显示指定范围的主存内容 如图所示 由图可见 在DEBUG调试程序的提示符下 键入D0000 00100026命令 显示从物理地址为0000H 0010H到物理地址为0000H 0026H共23个字节单元的内容 在DEBUG调试程序的提示符下 键入DDS 0100011F命令 显示从数据段偏移地址为0100H 物理地址为 DS 0100H 到数据段偏移地址为011FH共32个字节单元的内容 在DEBUG调试程序的提示符下 键入D0100L20命令 显示从从数据段偏移地址为0100H开始连续20H 32个 个字节单元的内容 4 2 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个字节单元已被修改为数据表的内容 4 2 3 填充命令F Fill F命令用于对一个内存区域填写内容 同时改写原来的内容 其格式为 F范围数据表功能 用数据表的数据写入指定范围的内存 如果数据个数超过指定的范围 则忽略多出的项 如果数据个数小于指定的范围 则重复使用这些数据 直到填满指定范围 如图所示 由图可见 在DEBUG调试程序的提示符下 先键入D0100012F命令 查看指定范围的内存单元的内容 然后用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命令 显示所以寄存器内容和标志位状态 前两行给出所有寄存器的值 包括各个标志状态 最后一行给出了当前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位的情况为NVUPEIPLNZNAPONC紧接着光标闪烁 提示可以键入新的内容予以修改 键入 OVDNDINGZRACPECY 再键入R命令 可以看出FLAGS寄存器的OF DF IF SF ZF AF PF CF位已经修改为OVDNDINGZRACPECY 4 2 5 汇编命令A Asemble A命令用于汇编指令 即将输入的指令汇编成对应的机器语言 存入指定的内存区域 它有两种格式 1 A 2 A地址 1 A功能 若还没有使用过A命令 则从当前CS IP开始汇编指令 若已使用过A命令 接着上一个A命令的最后一个单元开始汇编指令 DEBUG调试程序将他们汇编成机器代码 相继地存放在指定地址开始的存储区中 最后要输入一个回车结束A命令 如图所示 由图可见 在DEBUG调试程序的提示符下 键入A命令 DEBUG调试程序显示0AF3 0100 这是当前的CS IP值 接着输入MOVAX 1234指令 该指令被汇编成机器语言 共3个字节 所以下一条指令MOVBX 5678从0AF3 0103处汇编起 依次类推 其汇编成的机器语言可用反汇编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开始 即从0B60H 0000H开始 2 U范围功能 对指定范围的内存单元内容进行反汇编 如图示 4 2 7 运行命令G Go G命令用来连续执行指令 它的格式为 G 地址 断点地址1 断点地址2 断点地址10 功能 从指定地址处开始运行程序 直到遇到断点或者程序正常结束 然后停止执行 并显示当前所有寄存器和标志位的内容 以及下一条将要执行的指令 以便观察程序运行到此的情况 如图所示 由图可见 DEBUG调试程序调试的是可执行文件XIANSHI EXE 键入U命令 DEBUG调试程序对可执行文件XIANSHI EXE进行反汇编 键入G 00050009命令 从MOVAH 01H指令执行到CMPAL 00H为止 CMPAL 00H指令本身不执行 执行的结果是光标闪烁 提示输入一个字符 这段指令的功能就是从键盘输入一个字符 并回显 输入字符的ASCII码存入AL寄存器中 我们输入字符5 然后DEBUG调试程序显示当前所有寄存器和标志位的内容 以及下一条将要执行的指令 接着键入G0017命令 从当前的CS IP 0B5CH 0009 开始运行一直到0017H这个断点 然后DEBUG调试程序显示当前所有寄存器和标志位的内容 以及下一条将要执行的指令 可见 G命令等号后的地址指定程序段运行的起始地址 如不指定则从当前的CS IP开始运行 断点地址如果只有偏移地址 则默认是代码段CS 断点可以没有 但最多只能有10个 4 2 8 跟踪命令T Trace T命令也称为单步命令 它提供了一种逐条指令运行程序的方法 它的格式有两种 1 T 地址 2 T 地址 数值 1 T 地址 功能 从指定地址起执行一条指令后停下来 每条指令执行后都要显示所有寄存器和标志位的值以及下一条指令 如未指定地址则从当前的CS IP开始执行 即逐条指令跟踪 如图所示 由图可见 在DEBUG调试程序的提示符下 键入A命令 汇编指令序列MOVAX 1234HMOVBX 5678HADDAX BXMOVCX BXSUBAX CX接着键入T 0100命令 执行0100H所在的一条指令MOVAX 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

提交评论