汇编调试程序Debug使用

DEBUG是一款专为汇编语言设计的调试工具,提供步进、设置断点等功能。本文详细介绍了DEBUG的调用方式及主要命令,包括D、E、R、G、T、A、U、N、L、W、Q等命令的使用,以及DEBUG的调试流程,帮助汇编语言程序员更好地理解和应用DEBUG进行程序调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。

Debug 程序的调用

  在DOS提示符下,可以键入命令:

C> DEBUG [d:][path][文件名][参数1][参数2]

  
  其中,文件名是被调试文件的名称,它必须是执行文件(EXE),两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符:
  这里写图片描述

Debug的主要命令

名称解释格式
a(Assemble)逐行汇编a [address]
c(Compare)比较两内存块c range address
d(Dump)内存16进制显示d [address]或 d [range]
e(Enter)修改内存字节e address [list]
f(fin)预置一段内存f range list
g(Go)执行程序g [=address][address…]
h(Hexavithmetic)制算术运算h value value
i(Input)从指定端口地址输入i pataddress
l(Load)读盘l [address [driver seetor]]
m(Move)内存块传送m range address
n(Name)置文件名n filespec [filespec…]
o(Output)从指定端口地址输出o portadress byte
P执行循环、重复的字符串指令、软件中断或子例程。不跟踪内部。p
q(Quit)结束q
r(Register)显示和修改寄存器r [register name]
s(Search)查找字节串s range list
t(Trace)跟踪执行t [=address] [value]
u(Unassemble)反汇编u [address ]或range
w(Write)存盘w [address[driver sector secnum]]

显示内存单元内容的命令D

  • D (Dump) 内存以16进制显示

  格式为:

-D [地址]
-D [范围]

这里写图片描述

修改内存单元内容的命令E

用给定的内容代替指定范围的单元内容

  • E(Enter)修改内存字节

-E 地址 内容表

  例如,在DOS中键入以下命令:

修改指定范围内容
-E DS:100 F3 "XYZ" 8D
查看修改后的内容
-D DS:100

这里写图片描述

逐个单元相继地修改

-E 地址 

  例如,在DOS中键入以下命令:

修改指定范围内容
-E 100
查看修改后的内容
-D DS:100

这里写图片描述

检查和修改寄存器内容的命令R

显示CPU内部所有寄存器内容和标志位状态

  • R(Register)显示和修改寄存器

  格式为:

-R 

这里写图片描述
  R命令中显示中标志位状态位的含义如下表所示:

标识名置位复位
溢出Overflow(是/否)OVNV
方向Direction(减量/增量)DNUP
中断Interrupt(允许/屏蔽)EIDI
符号Sign(负/正)NGPL
零Zero(是/否)ZRNZ
辅助进位Auxiliary Carry(是/否)ACNA
奇偶Parity(偶/奇)PEPO
进位Carry(是/否)CYNC

显示和修改某个寄存器的内容

  格式为:

-R 寄存器名

  例如,在DOS中键入以下命令:

查看修改后的内容
-R
修改指定范围内容
-R AX
查看修改后的内容
-R

这里写图片描述
  如果不想要修改修改AX的内容,可以在出现后,直接回车就取消修改了。可以拿来查看寄存器中存储数据的内容。

-R AX
AX 0000
:                ---->在这里直接回车(Enter)就可以退出修改了

显示和修改标志位状态

  格式为:

-RF 

  例如,在DOS中键入以下命令:

查看修改后的内容
-R
修改指定范围内容
-R AX      ---->如果不想修改的话,直接回车(Enter)可以跳过修改
查看修改后的内容
-R

这里写图片描述

运行命令G

  • G(Go)结束

  格式为:

-G [=地址1][地址2[地址3......]]

  其中,地址1规定了运行起始地址,后面的若干地址均为断点地址。

追踪命令T

  • T(Trace)跟踪执行

逐条指令追踪

  格式为:

-T [地址]

  该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。

多条命令追踪

  格式为:

-T [地址][]

  该命令从指定地址起执行后停下来,n由[值]确定。

汇编命令A

  • A(Assemble)逐行汇编

  格式为:

-A [地址]

  该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。

反汇编指令U

  • U(Unassemble)反汇编

按地址反汇编

  格式为:

-U [地址]

  该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一个指令的下一个单元开始显示32个字节。
  这里写图片描述

按范围反汇编

  格式为:

-U 范围

  该指令对指定范围的内存单元进行反汇编。
  这里写图片描述

命名命令N

  • N(Name)置文件名

  格式为:

-N 文件标识符 [文件标识符]

  此命令将两个文件标志符格式化在CS:5CH和CS:6CH的两个文件控制块里面,以便使用L或者是W命令把文件装入或者存盘。

装入命令L

  • L(Load)读盘

  1.把磁盘上指定扇区的内容装入到内存指定地址起始的单元中,格式为:

-L 地址 驱动器 扇区号 扇区数

  2.装入到指定文件中,格式为:

-L [地址]

  此命令已在CS:5CH中格式化的文件控制块所制定的文件。
  在用L命令前,BX和CX中应包含所读文件的字节数。

写命令W

  • W(Write)存盘

  1.把数据写入到磁盘的指定扇区:

-W 地址 驱动器 扇区号 扇区数

  2.把数据写入到指定文件中:

-W [地址]

  此命令把指定内存区域中的数据写入由CS:5CH处的FCB所规定的文件中。
  在用W命令前,BX和CX中应包含要写入文件的字节数。

退出命令Q

  • Q(Quit)退出

  格式为:

-Q

  它退出DEBUG程序,返回DOS,但该命令本身并不把内存中的文件存盘,如需存盘,应在执行Q命令前先执行写命令W。

DEBUG调试过程

  DEBUG调试并运行可执行文件的过程,如何查看执行结果?

  • 1、编写源代码XX.asm文件
  • 2、在debug中键入masmXX.asm
  • 3、生成XX.obj文件
  • 4、在debug中键入linkXX.obj
  • 5、生成XX.exe可执行文件
  • 6、在debug中键入XX.exe 执行文件
  • 7、用U命令和T命令调试。
  • 8、在执行指令时.在寄存器状态下方会显示下次该执行的指令和该指令的操作数在内存中的内容,根据指令来观察寄存器的状态标志的变化来查错和查看执行结果。

附录

Dism++,最强的Windows实用工具,PE必备工具Dism++是由初雨团队采用微软内部API编写的一款开源免费的实用工具,最开始的名字叫Windows更新清理工具,号称全球第一款基于CBS 的 Dism GUI 实现!Dism++可以说是一个Dism的GUI版,但是并不依赖Dism,直接基于更底层的CBS(Component Based Servicing Reference)。Dism++作为第三版清理工具更加深入系统底层,功能和清理效果都非常不错。它具有功能如:空间回收、更新清理、系统优化、CompactOS、Windows Update、完整ESD支持、ESD转ISO、WIM/ESD互转,Imagex、ISO生成器、引导修复、系统备份、系统还原、春哥附体、驱动管理等,兼容Windows Vista/7/8/8.1/10平台。 Dism++特性支持情况 1:WIM支持,比如创建WIM,挂载WIM,以及释放WIM(所有系统均支持) 2:WIM快速挂载以及完整的ESD支持,比如创建ESD,ESD转WIM,ESD释放等 3:WIMBoot支持,比如创建WIMBoot启动的WIM文件或者释放WIMBoot启动的系统 4:热备份系统,直接在系统运行时直接备份自身,无需进入PE。(所有系统均支持) 5:热还原系统,直接在系统运行时直接还原系统自身,无需进入PE。(所有系统均支持,但是需要RE环境完好) 6:完整的更新固化支持(即: /Cleanup-Image /StartComponentCleanup /ResetBase) (需要Windows 8.1或者更高) 7:系统修复支持(即:/Cleanup-Image /RestoreHealth)(需要Windows 8或者更高) 8:BCD引导修复(所有系统均支持,但是Win7有限支持,在BIOS启动只能修复BIOS方式,UEIF启动只能修复UEFI方式,更高版本没有此限制) 9:Compact支持(Windows 7或者更高) 新版变化 Dism++ 10.1.1000.70 19:06 2018/4/16 1:解决BUG 438,Windows 10 17639无法处理wim问题。 2:新增Fea211,系统还原后自动纠正系统盘盘符,避免跨硬盘还原导致黑屏问题。 3:行为调整,Dism++选项卡中显示的版本号调整为UBR版本号,避免用户潜在疑惑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值