什么是DEBUG软件

什么是DEBUG软件 谢谢了

debug是一个汇编工具

DEBUG的用法。
DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。
DEBUG把所有数据都作为字节序列处理。因此它可以读任何类型的文件。DEBUG可以识别两种数据: 十六进制数据和ASCⅡ码字符。它的显示格式是各个字节的十六进制值以及值在32与126之间的字节的相应ASCⅡ码字符。
在DEBUG中输入数据有两种方法: 提示方法和非提示方法。在用提示方法时,用户可以输入要求输入数据的命令,后跟数据所要输入的地址。然后用户就可以看到该地之中已有内容及一个冒号提示符。此时用户可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到短横(-)提示符。在运用非提示方法时,用户可以输入要输入数据的内存地址以及要输入的字节。但与使用字处理程序或正文编辑程序时不一样,在使用DEBUG时,用户不能直接移动光标到一入口点输入或修改数据,而要一次输入一个或几个字节。
在使用DEBUG时可以只涉及内存中的数据,从而一般都要指定所要处理的内存地址,地址的输入格式是: [段地址]: [位移]。如果没有输入地址,DEBUG将假定为当前内存段,从位于地址100H的字节开始。前100H字节保留给程序段前缀使用,这一专用区域用于建立DOS与程序之间的联系。DEBUG总是用四位十六进制数表示地址。用两位数表示十六进制数据。
讲到这里大家应该对DEBUG有了初步的了解,但是光知道这些可不够,接下来我来讲讲DEBUG的命令格式和命令。当输入
DEBUG
调用了DEBUG程序,就会出现一个短横提示符,用户就可以在这一短横后输入DEBUG程序的命令。有些DEBUG命令会显示一个内存地址并产生一个作为提示符的冒号。在这些提示符后,用户可以输入一个新值以改变所显示位置原来的值。如果用户不输入一个新值而是按下回车或CTRL+C,那么原来的值不会改变。
一般用不着把地址和命令名字分开。例如,用转储命令D察看100号地址的数据,那么这个命令可以用以下任一种形势输入:
D100
D 100
D。100
D,100
如果输入的命令中出现了错误,DEBUG将在下一行对着错误的位置标记出来,例如:
-s100 d 12
^Error
DEBUG的命令及功能如下:
* A[地址] 汇编命令
功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,改语句被汇编到 CS:0100区域。

* C[源地址范围][目的地址]比较命令
功能: 比较两内存区域中的内容是否相同,若不同则显示其地址和内容。

* D[地址] 或D[起始地址][目的地址] 转储命令
功能: 以内存映象方式显示内存中的信息。
说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号(。)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令, 则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。

* E[地址] [字节串) 修改内存命令
功能: 从指定的地址开始修改内存值。
说明: 若地址部分只输入偏移量,则 E 命令认为段包括在DS寄存器中。命令格式有两种:其一是用命令中包含的字节串替换从指定的地址开始的多个字节的内容;其二是命令后不跟字节串,则允许按顺序方式显示和修改字节,按下空格键为显示下一字节内容,若想修改,直接输入相应值。

* F[地址范围] [字节或字节串] 填写命令
功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。

* G[=起始地址] [[断点]……] 执行命令
功能: 执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执行的命令。
说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。

* H[数值][数值] 十六进制算术运算命令
功能: 分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明: 替用户完成简单的十六进制数的运算。

* I[端口地址]
功能: 从指定的端口输入并显示(用十六进制)的一个字节。

* L[地址][盘号:][逻辑扇区号][扇区数]
功能: 将一个文件或盘的绝对扇区装入存储器。
说明: 单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……出现读盘错,显示错误信息。

* M[地址范围][起始地址] 数据传送命令
功能: 把地址范围内的存储器单元的内容移到起始地址的指定地址中
说明: 传送期间,源区和目标区可以部分重叠;传送后源区域数据保持不变。

* N[盘号: ] [路径] [文件名] [扩展名]
功能: 定义操作文件名。
说明: 可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存 CS:5C和CS:6C上,供以后的L和W命令操作之用。

* O[端口地址][数据] 输出命令
功能: 发送字节到指定的输出端口。

* P[=地址] [数据] 进程命令
功能: 将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。
说明: 在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。P命令与T 命令有相同的句法。

* Q 退出命令。

* R[寄存器] 寄存器命令
功能: 一,显示单个寄存器的内容,并提供修改功能。 二,显示所有寄存器内容, 再加上字母标志位状态以及要执行的下一条指令。 三,显示8个标志位状态, 并提供修改功能。

* S[地址范围] [字符串]
功能: 在指定的地址范围内查找给定的字符串。
说明: 用来指定在地址范围内查找一个字符串,若找到则显示其地址, 否则直接显示DEBUG提示符。隐含地址为DS段值。

* T[=地址][指令条数] 跟踪命令
功能: 逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。
说明: 通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令, 每执行一条指令之后,显示所有寄存器的内容和标志状态。

* U[起始地址]或者[地址范围]
功能: 将内存中的内容转换为汇编语句。
说明: 反汇编的字节数取决与用户的系统显示形式,以及在U命令中使用的可选项。

* W[地址] [盘符:] [起始扇区] [扇区数] 写盘命令
功能: 将修改过的数据写到磁盘上。
说明: 可以将指定内存地址开始的数据写在磁盘上,可以在没有指定参数, 或指定地址参数的情况下,将调试文件写在磁盘上。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-28
1. 直接输入、更改、跟踪、运行汇编程序
  2. 观察操作系统的内容;�
  3. 查看ROM BIOS的内容;�
  4. 观察更改RAM内部的设置值;�
  5. 以扇区或文件的方式读写软盘数据。�
  在DEBUG中地址用段地址与段内地址来表示,而段地址可以明确地指出来,也可以用一个段指示器(段寄存器)来代表,用段寄存器表示时,其段地址就是此寄存器的内含值:�
  如:用段地址和段内地址表示FOFF:0100�
  用段寄存器和段内地址表示CSF:0100←CS指向F000�
  下面列出了常用命令用法。
  -A 地址 从指定地址开始编写小汇编程序,按两个回车键结束编辑
  -U 地址 从指定地址开始反汇编32字节的机器指令,缺省地址则从上一U命令继续
  -D 始址 终址 以16进制/Asc字符对照方式显示指定内存范围的数据,每行显示10H个字节
  -E 地址 值表 用给出的值表(空格分隔)替换指定地址开始的内存单元,例:-E 100 'v' 1F 'hello'
  -N 文件名 为后续的L/W命令约定所操作的文件名
  -L 地址 将N命令所指定文件的内容读入到指定内存位置。另,逻辑卷扇区直接读:-L 地址 逻卷号 起始逻扇号 扇数
  -W 地址 将BX-CX个字节的内存数据写入N命令指定的文件中。另,逻辑卷扇区直接写:-W 地址 逻卷号 起始逻扇号 扇数
  -R 寄存器名 显示并允许修改指定寄存器的值
  -G=始址 终址 执行指定内存中的机器指令程序
  -T=地址 单步执行机器指令,缺省地址则从上一T命令继续。另,继续跟踪m条指令:-T m
  读取c:卷的引导扇区,并保存到Boot.1文件中,并简单分析引导程序的前面几条指令:
  -L 1000 2 0 1
  -N boot.1
  -R bx ;输入0000
  -R cx ;输入0200
  -W 1000
  -U 1000
  读取第一个硬盘上的主引导扇区,并保存到MB.1文件中,在屏幕上显示硬盘分区表数据:
  -A 100
  yyyy:0100 mov dx,0080
  yyyy:01xx mov cx,0001
  yyyy:01xx mov ax,yyyy
  yyyy:01xx mov es,ax
  yyyy:01xx mov bx,1000
  yyyy:01xx mov ax,0201
  yyyy:01xx int 13
  yyyy:01zz nop
  -G=yyyy:0100 01zz
  -N mb.1
  -R bx ;输入0000
  -R cx ;输入0200
  -W 1000
  -D 11be 11ff
  debugging命令
  debugging命令概述
  获得路由器中交换的报文和帧的细节信息
  用于调试信息
  debugging命令使用注意事项
  不使用debug命令监控正常的网络运行
  在网络使用的低峰期使用
  不要轻易使用类似debugging all之类的命令
  使用debugging命令后,应立即以“undo debugging”命令终止debugging命令的执行。
  Debugger
  "Debugger"这个词按它的英文字面意思来讲是这样一种“装置”(-er),这种装置可以“消除”(De-)“系统中的缺陷”(bug)。然而事实上,迄今为止我们经常使用到的"Debugger"只是用来帮助我们进行Debug的工具,"Debugger"本身不能自动完成"Debug"。我们可以回想一下我们是如何进行Debug的,在进行Debug的过程中,我们通过Debugger来完成以下工作:
  (1)监视“Debug对象”的状态;
  (2)控制“Debug对象”的运行;
  这些工作可以为“发现Debug对象中存在的问题”以及“对解决问题方案的检验”提供有用的信息。
  监控工作有时只需要由软件就可以完成,有时不仅需要软件支持,还需要硬件的支持。
  Debugger除了被用来Debug,还被用来帮助我们理解“Debug的对象”内部结构,因为我们用到的Debugger能够完成对“Debug对象”的监控工作,在监控的过程中可以获取“Debug对象”动态特征的信息,这对我们理解其结构是非常有用的。
  关于更详细的介绍和研究可以参考国人原创的《软件调试》 http://www.douban.com/subject/3088353/,这是一本非常全面且深入的“软件调试”红皮书。
  WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
  DEBUG 2
  Debug
  启动 Debug,它是可用于测试和调试 MS-DOS 可执行文件的程序。
  Debug [[drive:][path] filename [parameters]]
  参数
  [drive:][path] filename
  指定要测试的可执行文件的位置和名称。
  parameters
  指定要测试的可执行文件所需要的任何命令行信息。
  ++
  说明
  使用 Debug 命令但不指定要测试的文件
  如果使用没有位置和文件名的 Debug 命令,然后键入所有的 Debug 命令以响应 Debug 提示符,连字符 (-)。
  Debug 命令
  以下是 Debug 命令列表:
  ? 显示 Debug 命令列表。
  a 汇编 8086/8087/8088 记忆码。
  c 比较内存的两个部分。
  d 显示部分内存的内容。
  e 从指定地址开始,将数据输入到内存。
  f 使用指定值填充一段内存。
  g 运行在内存中的可执行文件。
  h 执行十六进制运算。
  i 显示来自特定端口的 1 字节值。
  l 将文件或磁盘扇区内容加载到内存。
  m 复制内存块中的内容
  /n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
  o 向输出端口发送 1 个字节的值。
  p 执行循环、重复的字符串指令、软件中断或子例程。
  q 停止 Debug 会话。
  r 显示或改变一个或多个寄存器。
  s 在部分内存中搜索一个或多个字节值的模式。
  t 执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 Debug 下一步要执行的指令的解码形式。
  u 反汇编字节并显示相应的原语句。
  w 将被测试文件写入磁盘。
  xa 分配扩展内存。
  xd 释放扩展内存。
  xm 映射扩展内存页。
  xs 显示扩展内存的状态。
  分隔命令参数
  所有 Debug 命令都接受参数,除了 q 命令之外。可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。因此,以下命令等价:
  dcs:100 110
  d cs:100 110
  d,cs:100,110
  指定有效地址项
  Debug 命令中的 address 参数指定内存位置。Address 是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。可以忽略段寄存器或段地址。a,g,l,t,u 和 w 命令的默认段是 CS。所有其他命令的默认段是 DS。所有数值均为十六进制格式。
  有效地址如下:
  CS:0100
  04BA:0100
  在段名和偏移量之间要有冒号。
  指定有效范围项
  Debug 命令中的 range 参数指定了内存的范围。可以为 range 选择两种格式:起始地址和结束地址,或者起始地址和长度范围(由 l 表示)。
  例如,下面的两个语法都可以指定从 CS:100 开始的 16 字节范围:
  cs:100 10f
  cs:100 l 10
  ++
  Debug 子命令
  选择 Debug 命令以获得详细信息。
  Debug:A(汇编)
  Debug:C(比较)
  Debug(转储)
  Debug:E(键入)
  Debug:F(填充)
  Debug:G(转向)
  Debug:H(十六进制)
  Debug:I(输入)
  Debug:L(加载)
  Debug:M(移动)
  Debug:N(名称)
  Debug:O(输出)
  Debug:P(执行)
  Debug:Q(退出)
  Debug:r(寄存器)
  Debug:s(搜索)
  Debug:T(跟踪)
  Debug:U(反汇编)
  Debug:W(写入)
  Debug:XA(分配扩展内存)
  Debug:XD(取消分配扩展内存)
  Debug:XM(映射扩展内存页)
  Debug:XS(显示扩展内存状态)
  ***********************Debug子命令******************************
  Debug:A(汇编)
  直接将 8086/8087/8088 记忆码合并到内存。
  该命令从汇编语言语句创建可执行的机器码。所有数值都是十六进制格式,必须按一到四个字符输入这些数值。在引用的操作代码(操作码)前指定前缀记忆码。
  a [address]
  参数
  address
  指定键入汇编语言指令的位置。对 address 使用十六进制值,并键入不以“h”字符结尾的每个值。如果不指定地址,a 将在它上次停止处开始汇编。
  有关将数据输入到指定字节中的信息,请单击“相关主题”列表中的 Debug E(键入)。
  有关反汇编字节的信息,请单击“相关主题”列表中的 Debug U(反汇编)。
  范例
  a 命令支持所有形式的间接注册命令,如下例所示:
  add bx,34.[si-1]
  pop
  push [si] )
  还支持所有操作码同义词,如下例所示:
  loopz 100
  loope 100
  ja 200
  jnbe 200
  对于 8087 操作码,必须指定 wait 或 fwait 前缀,如下例所示:
  fwait fadd st,st(3) ; this line assembles
  ; an fwait prefix
  说明
  使用记忆码
  段的替代记忆码为 cs:、ds:、es: 和 ss:。远程返回的记忆码是 retf。字符串处理的记忆码必须明确声明字符串大小。例如,使用 movsw 可以移动 16 位的字串,使用 mov***(文字因故被系统屏蔽)***(文字因故被系统屏蔽) 可以移动 8 位字节串。
  汇编跳转和调用
  汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。通过使用 near 或 far 前缀可以替代这样的跳转或调用,如下例所示:
  -a0100:0500
  0100:0500 jmp 502 ; a 2-byte short jump
  0100:0502 jmp near 505 ; a 3-byte near jump
  0100:0505 jmp far 50a ; a 5-byte far jump
  可以将 near 前缀缩写为 ne。
  区分字和字节内存位置
  当某个操作数可以引用某个字内存位置或者字节内存位置时,必须用前缀 word ptr 或者前缀 byte ptr 指定数据类型。可接受的缩写分别是 wo 和 by。以下范例显示两种格式:
  dec wo [si]
  neg byte ptr [128]
  指定操作数
  Debug 使用包括在中括号 ([ ]) 的操作数引用内存地址的习惯用法。这是因为另一方面 Debug 不能区分立即操作数和内存地址的操作数。以下范例显示两种格式:
  mov ax,21 ; load AX with 21h
  mov ax,[21] ; load AX with the
  ; contents of
  ; memory location 21h本回答被网友采纳
相似回答