汇编 DEBUG主要 命令 大全 最详细
- 格式:doc
- 大小:35.50 KB
- 文档页数:3
DEBUG主要命令DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1.DEBUG程序的调用在DOS的提示符下,可键入命令:C:>DEBUG [d:][path][文件名][参数1][参数2]其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。
2.DEBUG的主要命令⑴显示内存单元内容的命令D,格式为:-D [地址] 或-D [范围]例如,显示指定范围内存单元内容的方法为:-D 100 1FF18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G...18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。
这里没有指定段地址,D命令自动显示DS段的内容。
⑵修改内存单元内容的命令E,它有两种格式1)用给定内容代替指定范围的单元内容,格式为:-E 地址内容表例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。
2)逐个单元相继地修改,格式为:-E 地址例如:-E DS:10018E4:0100 89.78此命令是将0100单元内容89改为78。
78是程序员从键盘输入的。
程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。
⑶检查和修改寄存器内容的命令R,它有三种方式1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态-R该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。
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 110d cs:100 110d,cs:100,110指定有效地址项Debug 命令中的 address 参数指定内存位置。
Debug常用命令实践一实验目的<1>学习Debug常用命令、掌握观察寄存器和内存单元的方法。
<2>获取计算机只认识机器语言的直接感受。
<3>熟悉汇编语言编程工具的使用。
二 Debug常用命令1.汇编命令A 格式:-A [地址]功能:从指定地址开始允许输入汇编指令,并将汇编成机器指令代码从指定代码开始存放,若不指定地址则系统默认的地址开始存放,按回车键退出汇编状态。
应用:用于调试一条指令或几条指令组成的一个程序段。
2.显示或修改寄存器命令R 格式: -R [寄存器名]功能:若指定寄存器,则显示指定寄存器的内容,并可进行修改;若不要修改,则按Enter键,若为指定寄存器,则默认显示所有寄存器内容。
应用:常用于寄存器的值查看指令的执行结果。
3.内存单元内容的,命令E 格式:-E [地址] 内容表功能:若指定内容表,则用内容表中的内容代替指定地址开始存储单元的值,否则,从指定地址考试逐个单元显示其内容,并等待用户修改。
按空格键继续显示下一个单元的值,按回车键结束。
应用:常用于在调试程序的过程中改变变量的初始值。
4.显示内存单元内容的命令D,格式:-D [地址] 或–D [范围]功能:前者为显示指定地址开始的一段存储单元的值;后者为显示指定范围内存存储单元的值。
应用:常用于在调试过程中检查变量的值.例如:-D 200 ;显示从DS:200单元开始的各单元的值-D 200 L10 ; 显示从DS:200单元开始的10个字节单元的值。
5.单步执行命令T 格式:-T [=地址]功能:从从指定地址执行一条指令后停下来,显示寄存器内容和状态值,若未指定地址,则执行当前指令的下一条指令。
6.反汇编命令U 格式:-U [地址] 或–U [范围]功能:从指定地址开始,反汇编32个字节,或者对指定范围内的主存内容进行反汇编,若没有指定地址,则接着上一个U命令的最后一个单元开始;若还没有使用过U命令,则从当前cs:ip开始。
Debug常用命令集名称解释格式a (Assemble) 逐行汇编a [address]c (Compare) 比较两内存块c range addressd (Dump) 内存16进制显示d [address]或d [range]e (Enter) 修改内存字节e address [list]f (fin) 预置一段内存f range listg (Go) 执行程序g [=address][address...]h (Hexavithmetic) 制算术运算h value valuei (Input) 从指定端口地址输入i pataddressl (Load) 读盘l [address [driver seetor]]m (Move) 内存块传送m range addressn (Name) 置文件名n filespec [filespec...]o (Output) 从指定端口地址输出o portadress byteq (Quit) 结束qr (Register) 显示和修改寄存器r [register name]s (Search) 查找字节串s range listt (Trace) 跟踪执行t [=address] [value]u (Unassemble) 反汇编u [address ]或rangew (Write) 存盘w [address[driver sector secnum]]? 联机帮助?debug小汇编a命令debug小汇编a命令是一个很有用的功能,许多的小程序都要他来做。
编一些小程序比汇编要来得方便,快洁。
在Debug中,中断是非常有用的,首先,让我们先了解一下中断。
所谓中断,其实,就是,当你做某事时,有人过来找你有其他事,你先放下手中的事(计算机中,称为保护现场),再去与叫你的那个人办事去,等完了,你又回,接着做刚才的事。
这是个很通俗的讲法。
计算机在运行时,也会出现这种情况,我们叫之中断。
dos汇编debug基本命令程序DOS汇编(Debug)基本命令程序在学习和编写DOS汇编语言程序时,了解和掌握调试程序是非常重要的。
DOS提供了一个非常有用的调试器,即Debug。
Debug是一个基本的汇编语言调试程序,它可以让程序员在运行程序时进行单步执行,查看寄存器和内存的内容,以及进行程序的调试和错误修复。
本文将介绍DOS汇编(Debug)基本命令程序。
一、启动Debug要启动Debug,可以在DOS命令提示符下输入"debug"命令,然后按Enter键。
此时,会显示Debug的提示符"-",表示Debug 已经启动。
二、基本命令Debug提供了一系列命令,用于执行和调试汇编语言程序。
下面是一些常用的基本命令:1. a(assemble):将汇编指令翻译成机器码,并将其写入内存中。
例如,输入"a 100"表示从内存地址100开始输入汇编指令。
2. d(dump):显示内存中的内容。
可以使用"d"命令来查看内存中的指令和数据。
例如,输入"d 100"表示从内存地址100开始显示内存内容。
3. e(enter):修改内存中的指令或数据。
可以使用"e"命令来修改内存中的指令或数据。
例如,输入"e 100"表示修改内存地址100处的内容。
4. g(go):执行程序。
使用"g"命令可以让程序开始执行。
例如,输入"g"表示开始执行程序。
5. r(register):显示和修改寄存器的内容。
可以使用"r"命令来查看和修改寄存器的内容。
例如,输入"r ax"表示显示或修改AX寄存器的内容。
6. t(trace):单步执行程序。
使用"t"命令可以让程序以单步执行的方式运行。
DEBUG常用命令及其使用Debug是汇编程序设计的调试工具,它通过提供单步执行、断点设置等功能为汇编程序员提供了有效的调试手段。
我们通过在Debug状态下键入“?”号,就可得到所有的Debug 命令及其格式。
Debug命令一览表:assemble A[address]compare C range addressdump D[range]enter E address[list]fill F range listgo G[=address][addresses]hex H value1value2input I portload L[address][drive][firstsector][number] move M range addressname N[pathname][arglist]output O port byteproceed P[=address][number]quit Qregister R[register]search S range listtrace T[=address][value]unassemble U[range]write W[address][drive][firstsector][number] allocate expanded memory AX[#pages]deallocate expanded memory XD[handle]map expanded memory pages XM[Lpage][Ppage][handle]display expanded memory status XS上面如此多的Debug命令,也许会吓退汇编用户,但实际并不是所有的命令都必须掌握的,在进行上机程序题调试时,最常用的命令就是设置断点、单步执行、查看内存变量等,因为我们编制好汇编程序后,如果运行结果正确当然没有什么好做的,但当运行结果与我们预期的结果不一致时,就必须对程序进行调试。
DEBUG是Windows自带的调试工具一、A(assemble):汇编命令命令格式:a[<目标开始地址>]功能:从address地址开始写入汇编命令,回车结束此行,进入下一内存地址的编译。
如无address 参数,则默认从cs:ip下一址开始编译。
例:a 1000:1000 从1000:1000地址开始输入汇编指令。
二、C(compare):比较命令命令格式:c<范围><地址范围>功能:比较指定内存地址(range address)的值。
例:c 100:0 100 10:0 比较从100:0开始的下100个地址与10:0开始的下100个地址。
三、D(dump):内存显示命令命令格式:d[<目标开始地址][目标范围>]功能:显示指定范围的内存值。
例:d 100:100 显示100:100地址及下个内存的值。
d 100 显示ds:100地址及下个内存的值。
四、e(enter):内存修改命令命令格式:e<目标地址><目标范围>功能:修改指定内存的值。
使用:空格编辑下一内存地址值,减号回到上一内存地址进行重编辑,回车完成编辑。
例:e 修改ds:ip的值;e 100 修改ds:100内存的值。
五、F(fill):内存填充命令命令格式:f<目标范围><填充值列表>功能:填充指定范围内存的指定值。
使用: range:内存地址范围。
list:填充值列表,多个值用空格隔开。
依次列入指定地址,地址数,填充值数,则填充从头开始循环填入指定内存。
例:f 100 l 100 'ab''cd' 在从ds:100开始的下100个内存中分别填入'ab''cd'。
六、G(go):运行命令命令格式:g[=开始地址][断点地址]功能:从指定地址开始运行。
可设定断点,DEBUG支持最多10个断点的设定。
Debug命令详解Debug:A(汇编)Debug:C(比较)Debug:D(转储)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(反汇编)说明使用记忆码段的替代记忆码为 cs:、ds:、es: 和 ss:。
远程返回的记忆码是 retf。
字符串处理的记忆码必须明确声明字符串大小。
例如,使用movsw 可以移动 16 位的字串,使用 movsb 可以移动 8 位字节串。
汇编跳转和调用汇编程序根据字节替换自动将短、近和远的跳转及调用汇编到目标地址。
通过使用near 或far 前缀可以替代这样的跳转或调用,如下例所示:-a0100:05000100:0500 jmp 502 ; a 2-byte short jump0100:0502 jmp near 505 ; a 3-byte near jump0100:0505 jmp far 50a ; a 5-byte far jump可以将 near 前缀缩写为 ne。
汇编_DEBUG的使用汇编语言是一种低级语言,它与机器语言非常接近,每一个汇编语言的指令几乎都对应着一条机器指令。
因此,了解并掌握汇编语言对于理解计算机内部工作原理以及进行底层编程是非常有帮助的。
下面,我将详细介绍DEBUG的使用方法和功能。
1.DEBUG的启动和退出:在DOS命令行下输入DEBUG命令,即可启动DEBUG。
DEBUG启动后,会显示一个短横线"-”,表示等待执行命令。
在DEBUG中输入"q"命令,即可退出DEBUG。
2.DEBUG的命令格式和常用命令:-a:将键盘输入的ASCII码写入指定地址-d:显示内存中的指定地址的内容-e:修改内存中的指定地址的内容-g:从指定地址开始执行程序-r:查看和修改寄存器的值-t:查看和修改标志寄存器的值-u:以汇编代码的格式显示内存中的指令-w:将内存中的内容写入指定文件-n:加载并执行指定文件-i:打印当前的执行指令-f:在段间切换3.DEBUG的常用调试操作:- 通过“d”命令查看内存中的指令和数据内容,可以使用不同的参数来控制显示格式,如"d 100"表示从100H地址处开始显示,"d cs:100"表示从CS:100H地址处开始显示。
-通过“e”命令修改内存中的指令和数据内容。
- 通过“r”命令查看和修改寄存器的值,如"r ax"表示查看和修改AX寄存器的值。
-通过“u”命令以汇编代码的格式显示内存中的指令。
-通过“g”命令从指定地址开始执行程序。
-通过“n”命令加载并执行指定的二进制文件。
4.示例:下面给出一个使用DEBUG调试的示例过程:-启动DEBUG,进入DEBUG命令行界面。
-使用“n”命令加载一个二进制文件。
-使用“d”命令查看内存中的指令和数据,以及寄存器的值。
-使用“e”命令修改内存中的指令和数据。
-使用“g”命令执行程序。
-使用“r”命令查看和修改寄存器的值。
Debug主要命令1. A[地址] 汇编命令功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。
-a 010008F1:0100 MOV AH,0908F1:0102 MOV DX,10908F1:0105 INT 21H08F1:0109 db 'HELLO WORLD!$'08F1:0115-g2.D[地址] 或D[起始地址][目的地址] 转储命令功能: 以内存映象方式显示内存中的信息。
说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCII字符显示,所有不可打印字符用句号(.)表示。
每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。
若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令,则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。
3.E[地址] [字节串) 修改内存命令功能: 从指定的地址开始修改内存值。
说明: 若地址部分只输入偏移量,则 E 命令认为段包括在DS寄存器中。
命令格式有两种:其一是用命令中包含的字节串替换从指定的地址开始的多个字节的内容;其二是命令后不跟字节串,则允许按顺序方式显示和修改字节,按下空格键为显示下一字节内容,若想修改,直接输入相应值。
4.F[地址范围] [字节或字节串] 填写命令功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。
5.G[=起始地址] [[断点]……] 执行命令功能: 执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。
说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。
DEBUG 主要命令一览表 DEBUG [d:] [path] [.exe] [参数]2、DEBUG的主要命令(1)汇编命令A,格式为:-A[地址] 该命令从指定地址开始允许输入汇编语句,把它们汇编成机器代码相继存放在从指定地址开始的存储器中。
(2)反汇编命令U,有两种格式:1)-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
2)-U范围该命令对指定范围的内存单元进行反汇编,例如:-U 04BA:0100 0108或–U 04BA:0100 L9 此二命令是等效的。
(3)运行命令G,格式为:-G [=地址1][地址2[地址3。
]] 其中地址1规定了运行起始地址,后面的若干地址均为断点地址。
(4)追踪命令T,有两种格式:1)逐条指令追踪:-T[=地址] 该命令从指定地址起执行一条指令后停下来,显示寄存器内容和状态值。
2)多条指令追踪:-T[=地址][值] 该命令从指定地址起执行n条命令后停下来,n由[值]确定。
(5)显示内存单元内容的命令D,格式为:-D[地址]或-D[范围](6)修改内存单元内容的命令E,它有两种格式:1)用给定的内容代替指定范围的单元内容:-E地址内容表例如:-E 2000:0100 F3 “XYZ” 8D 其中F3,“X”“Y”“Z”和8D各占一个字节,用这五个字节代替原内存单元2000:0100到0104的内容,“X”“Y”“Z”将分别按它们的ASCII码值代入。
2)逐个单元相继地修改:-E地址例如:-E 100:18E4:0100 89.78 此命令是将原100号单元的内容89改为78。
78是程序员键入的。
(7)检查和修改寄存器内容的命令R,它有三种方式:1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R R命令显示中标志位状态的含义如下表所示:标志名置位复位溢出Overflow(是/否)OVNV 方向Direction(减量/增量)DNUP 中断Interrupt(允许/屏蔽)EIDI 符号Sign(负/正)NGPL 零Zero(是/否)ZRNZ 辅助进位Auxiliary Carry (是/否)ACNA 奇偶Parity(偶/奇)PEPO 进位Carry(是/否)CYNC 2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名例如打入:-R AX 系统将响应如下:AX FIF4 :表示AX当前内容为F1F4,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如:-R BX BX 0369 :059F 则BX内容由0369改为059F 3)显示和修改标志位状态,命令格式为:-RF 系统将给出响应,如OV DN EI NG ZR AC PE CY- 这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。
实验一DEBUG常用命令及8086指令使用实验目的:通过实验掌握下列知识:1、8086指令: M OV,ADD,SUB,XCHG等2、DEBUG命令: A,D,E,F,H,R,T,U。
3、ASCII码及用16进制数表示二进制码的方法。
内容及步骤:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。
2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令F110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
8、用R命令将AX,BX内容改写为1050H及23A8H。
二、8086常用指令练习1、传送指令1)用A命令在内存100H处键入下列内容: MOV AX,1234MOV BX,5678XCHG A X,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG A X,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH,34MOV AL,22ADD AL,AHSUB AL,78MOV CX,1284MOV DX,5678ADD CX,DXSUB CX,AXSUB CX,CX图略。
debug反汇编命令DEBUG是Windows自带的调试工具一、A(assemble):汇编命令命令格式:a[<目标开始地址>]功能:从address地址开始写入汇编命令,回车结束此行,进入下一内存地址的编译。
如无address参数,则默认从cs:ip下一址开始编译。
例:a 1000:1000 从1000:1000地址开始输入汇编指令。
二、C(compare):比较命令命令格式:c<范围><地址范围>功能:比较指定内存地址(range address)的值。
例:c 100:0 100 10:0 比较从100:0开始的下100个地址与10:0开始的下100个地址。
三、D(dump):内存显示命令命令格式:d[<目标开始地址][目标范围>]功能:显示指定范围的内存值。
例:d 100:100 显示100:100地址及下个内存的值。
d 100 显示ds:100地址及下个内存的值。
四、e(enter):内存修改命令命令格式:e<目标地址><目标范围>功能:修改指定内存的值。
使用:空格编辑下一内存地址值,减号回到上一内存地址进行重编辑,回车完成编辑。
例:e 修改ds:ip的值;e 100 修改ds:100内存的值。
五、F(fill):内存填充命令命令格式:f<目标范围><填充值列表>功能:填充指定范围内存的指定值。
使用: range:内存地址范围。
list:填充值列表,多个值用空格隔开。
依次列入指定地址,地址数,填充值数,则填充从头开始循环填入指定内存。
例:f 100 l 100 'ab''cd' 在从ds:100开始的下100个内存中分别填入'ab''cd'。
六、G(go):运行命令命令格式:g[=开始地址][断点地址]功能:从指定地址开始运行。
可设定断点,DEBUG支持最多10个断点的设定。
汇编语⾔debug常⽤调试命令详解显⽰修改寄存器命令RR;★显⽰所有寄存器和标志位状态;★显⽰当前CS:IP指向的指令。
显⽰标志时使⽤的符号:标志标志=1 标志=0OF OV NVDF DN UPIF EI DISF NG PLZF ZR NZAF AC NAPF PE POCF CY NC显⽰命令D① D [地址]② D [范围]如不指定范围,⼀次显⽰8⾏×16个字节。
-D ;默认段寄存器为DS,当前偏移地址-D DS:100 / -D CS:200-D 200:100-D 200;200为偏移地址,默认段寄存器DS-D DS:100 110/ -D 100 L 10修改命令E① E 地址;从指定地址开始,修改(或连续修改)存储单元内容。
DEBUG⾸先显⽰指定单元内容,如要修改,可输⼊新数据;空格键显⽰下⼀个单元内容并可修改,减号键显⽰上⼀个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
② E 地址数据表;从指定的地址开始⽤数据表给定的数据修改存储单元。
-E DS:100 F3 ‘AB’ 8D。
.反汇编命令U① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上⼀个U命令的最后⼀个单元开始;若第⼀次使⽤U命令省略地址,则从当前CS:IP开始(通常是CS:100)。
② U 范围;对指定范围的单元进⾏反汇编。
-U-U100-U100L10汇编命令AA [地址];从指定的地址开始输⼊符号指令;如省略地址,则接着上⼀个A命令的最后⼀个单元开始;若第⼀次使⽤A命令省略地址,则从当前CS:IP开始(通常是CS:100)。
注释:①在DEBUG下编写简单程序即使⽤A命令。
②每条指令后要按回车。
③不输⼊指令按回车,或按Ctrl+C结束汇编。
④⽀持所有8086符号硬指令,伪指令只⽀持DB、DW,不⽀持各类符号名。
跟踪命令(单步执⾏命令)T① T;从当前IP开始执⾏⼀条指令。
DEBUG在每个人的机器里都会有,只是很多人对它都很陌生,不要小看它,对你的破解会很有帮助的。
如你掌握了它的用法,对你的日常使用及维护工作会带来很大的方便,下面介绍一些它的基本指令用法:指令格式功能备注A A [记忆体位址] 组译汇编语言指令A 100C C [区段1] [区段范围] [区段2] 将两块内存作比较C 100 L20 200D D [记忆体拉址] 显示记忆体的内容D 100E E [记忆体位址] 编辑记忆体资料E 100F F [指定区段范围] 填充指定内存区块内容F 100 L10 90G G [区段:区址]带有任选断点执行G 100H H [运算子] [运算子]十六进制加减运算H 44 33I I [端口]读/显示输入字节L L [记忆位址]或[磁碟,磁轨,磁区] 装入文件或磁区L 100 2 1 2M M [区段范围] [记忆体位址]传送内存区块M 100 L10 110N N [档案名称] 定义文件及参量N O O [端口位址] 输出字节到端口P P [区段:区址]在下一指令上停止P 2Q Q 退出DEBUG 界面QR R [寄存器] 显示修改寄存器/标志R AXS S [记忆区段范围] 对字符进行检索S 100 L70 'j'T T [=记忆区段]或[数值范围]单步追踪TU U [记忆位址] 对指令进行反汇编U 100W W [记忆区段]或[指定范围] 写入文件或磁盘扇区W 100 0 1 1下面对一些常用指令进行详细剖析:A (Assemble)汇编指令1、输入汇编语句被汇编到内存的指定区段,此区段在开始时用A address 指定。
2、所有语句输入完成后,按ENTER 键返回。
3、完成输入后,可以用U 命令观看它的机械码。
D (Dump)显示命令1、从指定的地址开始显示内容,如果没有指定地址,则从前一个D命令继续显示。
2、如果没指定地址并是第一次,则从DS:100 处开始显示。
调试程序DEBUG的特点:在受控环境中测试程序;装入,显示或修改任何文件;执行DOS程序;完成磁盘实际读/写操作;建立或汇编汇编语言程序。
DEBUG的命令格式:DEBUG [drive:][path][filename][.ext][param...]其中:drive:是DEBUG将要调试的文件所在的磁盘驱动器。
path: 是查找DEBUG将要调试的文件所需的子目录路径,若未指定,DOS使用当前目录。
filename[.ext]是DEBUG将要调试的文件名。
param是将被调试的程序(或文件)的命令行参数。
附:DEBUG所完成的初始化动作,假定文件名没有,启动DEBUG:段寄存器CS、DS、ES和SS置为DEBUG程序后的第一个段。
指令指针寄存器IP置为100H(程序段前缀PSP后的第一个语句)。
堆栈指针SP置为段末或暂驻部分的结束地址(其中较小的那个地址)。
其余通用寄存器均置为0,标志寄存器置为下述状态:NV UP EI PL NE NA PO NC。
如果DEBUG命令行含有文件名,段寄存器DS和ES指向PSP。
寄存器BX和CX含有程序长度。
DEBUG使用单字符命令:☆显示存储单元的命令D(DEBUG),格式为:- D [address] 或- D[range]例如,按指定范围显示存储单元内容的方法为:-D 100 120067C:0100 C7 D7 0D 0A 32 33 33 34 - D5 C5 B4 C6 30 10 420C ....2334....0.B.067C:0110 03 41 42 43 44 45 46 47 - 48 49 4A 4B 4C 4D 4E4F .ABCDEFGHIJKLMNO067C:0120 8B说明:其中0100至0120是DEBUG显示的单元内容。
左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,“.”表示不可显示的字符。
这里没有指定段地址,D命令自动显示DS段的内容。
DEBUG主要命令
DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
1.DEBUG程序的调用
在DOS的提示符下,可键入命令:
C:>DEBUG [d:][path][文件名][参数1][参数2]
其中文件名是被调试文件的名字,它必须是可执行文件(EXE),两个参数是运行被调试文件所需要的命令参数,在DEBUG程序调入后,出现提示符“-”,此时,可键入所需的DEBUG命令。
2.DEBUG的主要命令
⑴显示内存单元内容的命令D,格式为:
-D [地址] 或-D [范围]
例如,显示指定范围内存单元内容的方法为:
-D 100 1FF
18E4:0100 47 06 04 02 38 01 47 06 -06 02 00 02 47 06 08 02 G...8.G.....G...
18E4:0110 02 02 3B 04 02 68 02 00 -4D 20 50 51 56 57 8B 37 ..;..h..M PQVW.7 其中左边为十六进制表示形式,右边为ASCII码表示形式,“.”表示不可显示字符。
这里没有指定段地址,D命令自动显示DS段的内容。
⑵修改内存单元内容的命令E,它有两种格式
1)用给定内容代替指定范围的单元内容,格式为:
-E 地址内容表
例如:-E DS:100 F358595A8D,即用F3,58,59,5A,8D五个字节代替内存单元DS:100到DS:104的内容。
2)逐个单元相继地修改,格式为:
-E 地址
例如:-E DS:100
18E4:0100 89.78
此命令是将0100单元内容89改为78。
78是程序员从键盘输入的。
程序员在修改完一个单元后,可按“空格”键继续修改下一单元内容,直至按“回车”键结束该命令。
⑶检查和修改寄存器内容的命令R,它有三种方式
1)显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态
-R
该命令可显示AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP及标志寄存器内容。
R命令显示中标志位状态的含义如下所示:
2)
-R 寄存器名
例如:-R AX
系统响应如下:
AX F130
:
表示AX当前内容为F130,此时若不对其作修改,可按“回车”键,否则,键入修改内容。
3)显示和修改标志寄存器内容
-RF
系统将给出响应,例如:
OV DN EI NG ZR AC PE CY-
这时若不作修改可按“回车”,否则在“-”之后键入修改值,键入顺序任意,各标志位的取值如上表所示。
⑷运行命令G,格式为:
-G [=地址1][地址2[地址3…]]
其中,地址1指定了运行的起始地址,后面的均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条要执行的指令。
⑸跟踪命令T,它有两种格式:
1)逐条指令跟踪,格式为:
-T[=地址]
该命令从指定地址起执行一条指令后停下来,显示所有寄存器及标志位的内容,如未指定地址从当前的CS:IP开始执行。
2)多条指令跟踪,格式为:
-T[=地址][值]
该命令从指定地址起执行n条指令后停下来,n由[值]确定。
⑹汇编命令A,格式为:-A [地址]
该命令允许输入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
必须注意:输入的数字均默认为十六进制数。
⑺反汇编命令U,它有两种格式:
1)从指定地址开始,反汇编32个字节,其格式为:
-U [地址]
2)对指定范围内的存储单元进行反汇编,其格式为:
-U [范围]
(8) 执行命令P,格式为:-P [=地址] [指令数]
该命令将控制从Debug 传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。
(9) 退出DEBUG命令Q,格式为:-Q
该命令退出DEBUG程序,返回DOS。
[关于参数的几点说明:]
1、在DEBUG中的提示符“-”下才能输入命令,在按“回车”键后,该命令才开始执行;
2、命令是单个字母,命令和参数的大小写可混合输入
3、在DEBUG中输入或显示的数据都是十六进制形式;
4、命令和参数、参数和参数之间要用空格、逗号或制表符等分隔;
5、用“段值:偏移量”的形式来表示地址,也可用段寄存器来代表“段值”;
例如:1000:0,ds:10,cs:30等;
6、范围:用来表示地址范围,从哪个地址开始,到哪个地址结束。
它有二种表示方式:
●地址地址——前者表示起始地址,要用“段值:偏移量”来表达,
后者表示终止地址,只用“偏移量”来表示;
●地址长度——前者表示起始地址,要用“段值:偏移量”来表达,
后者表示该区域的大小,用字母’L’开头的数值来表示例如:100:50 100——段值为100,偏移量从50到100的内存区域,
100:50 L100——段值为100,偏移量从50开始的100个字节区域。
7、当命令出现语法错误时,将在出错位置显示“^ Error”。