计算机debug指令详解_第1页
计算机debug指令详解_第2页
计算机debug指令详解_第3页
计算机debug指令详解_第4页
计算机debug指令详解_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

debug指令详解一DEBUG概述

DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以

用来检查内存中任何地址中的内容以及修改特定地址中的内容。

DEBUG还可以用于逐指令执行某个程序,追踪程序的执行过程,比

较一条指令执行前后数值变化情况,读写文件与磁盘扇区。此外,

DEBUG还可以用于读写端口中的数值。

在DEBUG状态下,所有数据都作为字节序列,可以用DEBUG把

任何类型的文件读入内存中。DEBUG能够处理的数据为两种:十六

进制数和ASCH码,使用两位数表示十六进制数据(0~9,A~F)。

在DEBUG中涉及内存中的数据时•,要指定数据所在的内存单元的地

址,地址的输入格式是:[段地址]:[位移]。如果没有输入地址,

DEBUG将假定为当前内存段,从位于地址100H的字节开始。前

100H字节保留给程序段前缀使用(称PSP结构,包含程序执行的

各种信息),该区域用于建立DOS与程序之间的联系。在DEBUG

中,使用四位十六进制数表示地址(0~9,A~F)。

DEBUG输入数据时有两种方法:提示方法和非提示方法。在提示方

法下,输入要求输入数据的命令,后跟保存数据的地址。执行后可以

看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输

入一个新的值或者按下回车键或CTRL+C回至「一”提示符。在非提

示方法下,输入保持数据的内存地址以及要输入的数据。DEBUG

的启动:进入DOS状态下,键入DEBUG‏,按ENTER

键,如:C:\>DEBUG‏,则屏幕显示:

符号“一”是进入DEBUG的提示符,在该提示符下可键入任意

DEBUG命令。

DEBUG的退出:

在DEBUG的提示符后输入Q命令,按ENTER键,则退出DEBUG

返回DOS。

DEBUG的使用:

在DEBUG的提示符后输入DEBUG命令,按ENTER键。

★A命令

格式:A[地址]

功能:将指令直接汇编成机器码输入到内存中。

参数说明:[地址]指定存放键入汇编语言指令的内存单元的位置。

★C命令

格式:C[源地址范围][目的地址]

功能:比较两内存区域中的内容是否相同。若不同则按字节显示其地

址和内容,若相同则不显示任何内容。

参数说明:[源地址范围]指定要比较的内存第一个区域的起始和结束

地址,或起始地址和长度。[目的地址]指定要比较的第二个内存区

域的起始地址。

★D命令

格式:D[地址]或D[起始地址][目的地址]

功能:以内存映象方式显示内存中的数据。参数说明:指定要显示

内容的内存单元的起始地址和结束地址,或起始地址和长度。如果不

指定[地址],Debug将从以前d命令中所指定的地址范围的末尾

开始显示128个字节的内容;第一次从DS:100处开始显示。

★E命令

格式:旦地址][字节串]或E[地址]

功能:从指定的地址开始修改内存值。参数说明:[地址]指定存放卜字

节串]第一个内存的位置,[字节串]是要放入内存单元中的数据。

★F命令

格式:F[地址范围][字节或字节串]

功能:将要填写的字节或字节串填入山地址范围指定的存储器中。

参数说明:[地址范围]指定要填充内存区域的起始和结束地址,或起

始地址和长度。[字节或字节串]指定要输入的数据,可以由十六进

制数或引号包括起来的字符串组成。

★G命令

格式:G[=起始地址][[断点].….]

功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄

存器标志和下一条要执行的命令。参数说明:[=起始地址]指定当

前在内存中要开始执行的指令所在的内存单元的地址。如果不指定

[=起始地址],DEBUG将从CS:IP寄存器中的当前地址开始执行

程序。[[断点].….]指定可以设置为g命令的部分的1到10个

临时断点。

★H命令

格式:H[数值][数值]

功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数

的差。

参数说明:[数值]表示从0到FFFFh范围内的任何十六进制数字。

★I命令

格式:I[端口地址]

功能:从指定的端口输入并显示(用十六进制)指定端口中的数据(字

节)。参数说明:[端口地址]指定要读取数据的端口地址。

★L命令

格式:L[地址][盘号:][逻辑扇区号1[扇区数]

功能:将一个文件或盘的绝对扇区装入存储器。

参数说明:[地址]指定要在其中加载文件或扇区内容的内存空间的

起始位置。[盘号:]指定包含读取指定扇区的磁盘的驱动器。该值是

数值型,表示为:0=A,1=B,2=C,……等。[逻辑扇区号]指

定要加载其内容的第一个扇区的十六进制数。[扇区数]指定要加载

其内容的连续扇区的十六进制数。

★M命令

格式:M[地址范围][起始地址]

功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中

参数说明:[地址范围]指定要复制内容的内存区域的起始和结束地

址,或起始地址和长度。[起始地址]指定要将range内容复制到

该位置的起始地址。

★N命令

格式:N[盘号:][路径][文件名][扩展名]

功能:定义DEBUG使用的文件。

参数说明:[盘号:H路径][文件名H扩展名]指定文件所在的盘符,

路径,文件名和扩展名。

★0命令

格式:0[端口地址][数据]

功能:发送数据(字节)到指定的输出端口。

参数说明:[端口地址]指定要写入数据的端口地址,[数据]指定要

向[端口地址]中写入的字节值。

★P命令

格式:P[=地址][数据]

功能:执行一个子程序调用指令,循环指令,中断指令或一个重复字

符串指令,停止在下一条指令上。

参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地

址,则默认地址是在CS:IP寄存器中指定的当前地址,[数据]指

定在将控制返回给Debug之前要执行的指令数,默认值为1。

★Q命令

格式:Q

功能:退出DEBUG返回DOS。

参数说明:无参数。

★R命令

格式:R[寄存器]

功能:1.显示单个寄存器的内容,并提供修改功能。2.显示所有寄

存器内容,再加上字母标志位状态以及要执行的下一条指令。3.显

示8个标志位状态,并提供修改功能。

参数说明:[寄存器]指定要显示其内容的寄存器名。

★S命令

格式:S[地址范围][字符串]

功能:在指定的地址范围内查找给定的字符串。

参数说明:[地址范围]指定要搜索范围的开始和结束地址。[字符串]

指定要搜索的字节值或字符串。字符串应包括在引号中。

★T命令

格式:T[=地址][指令条数]

功能:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内

容。

参数说明:[=地址]指定第一条要执行指令的位置。如果不指定地

址,则默认地址是在CS:IP寄存器中指定的当前地址,[指令条数]

指定在将控制返回给Debug之前要执行的指令数,默认值为1。

★U命令

格式:U[起始地址]或者[地址范围]

功能:将内存中的内容转换为汇编语句。

参数说明:[起始地址]或者[地址范围]指定要反汇编代码的起始地址

和结束地址,或起始地址和长度。

★W命令

格式:W[地址][盘符:][起始扇区][扇区数]

功能:将内存中的数据写入磁盘中。

参数说明:[地址]指定要写到磁盘文件的文件或部分文件的起始内存

地址。如果不指定address,Debug程序将从CS:100开始。[盘

符:]指定包含目标盘的驱动器。该值是数值型:0=A,1=B,2=

C,等等。[起始扇区]指定要写入第一个扇区的十六进制数。[扇区数]

指定要写入的扇区数。

★XA命令格式:XA[页面数]功能:分配扩展内存的指定页面数

参数说明:[页面数]指定要分配的扩展内存的16KB页数。★XD

命令格式:XD[释放的句柄]功能:释放指向扩展内存的句柄。参

数说明:[释放的句柄]指定要释放的句柄。★XM命令格式:XM

[要映射扩展内存的逻辑页面号][映射到的物理页面号][句柄]功

能:将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。参

数说明:[要映射扩展内存的逻辑页面号]指定要映射到物理页的扩展

内存的逻辑页面号。[映射到的物理页面号]指定将映射到的物理页面

号。[句柄]指定句柄。★XS命令格式:XS功能:显示有关扩

展内存状态的信息。参数说明:无参数

★A命令使用

说明:用于小段程序的汇编及修改目标程序,所有输入的数字均默认

为十六进制,并且不需要以“h”字符结尾。用户装入内存的汇编语句

是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语

句被汇编到CS:0100区域,则在它上次停止处开始汇编。

注意:1.直接在A命令下输入跳转指令时,跳转指令后应跟跳转

到的语句所在内存单元的地址,不能跟标号;使用跳转指令时,可以

指定跳转指令的属性:near,far。near前缀可以缩写为ne。如下

例所示:-aO1OO:O1OO

0100:0100jmp102

0100:0102jmpnear105

0100:0105jmpfar10a2.汇编语言指令所涉及到的操作数可以

是字操作数也可以是字节操作数,在语句不能判别操作数的类型时,

可以使用前缀wordptr或者前缀byteptr指定操作数的类型。

缩写分别是:wo和byo如下列所示:-a0100:0100

0100:0100decwordptr[100]

0100:0102decwoptr[100]

0100:0105decbyteptr[100]2.在DEBUG下,应注意区分立

即操作数和内存地址的操作数,使用包括在中括号([])中的操作

数表示内存地址。3.在DEBUG下,能够使用的伪指令仅有DB和

DW两个,分别用于定义字节和字操作数,此时定义的操作数被存放

在该定义指令所在的内存空间中。如下列所示(注意内存空间的变换,

why?):-a0100:0100

0100:0100DB'ABCDEFG'

0100:0107

★C命令使用说明:如果[源地址范围]和[目的地址]中内存单元

的数据相同,Debug将不显示任何内容而直接返回到Debug提示

符。如果有差异,Debug将按如下格式显示:[源地址]源地址中

内容目的地址中内容[目的地址]

如下列所示:

-CCS:100105DS:300;(假定CS=0AF6;DS=1000)

0AF6:010088001000:0300

0AF6:0101CO001000:0301

0AF6:010289001000:0302

0AF6:0103D8001000:0303

0AF6:010465001000:0304

0AF6:010566001000:0305

★D命令使用

说明:当使用d命令时,Debug分两个部分显示内存单元内容:左

边显示内存单元中存放的十六进制数;右边显示左边的十六进制所表

示的ASCII字符,所有不可打印字符用句号(.)表示。每行显示16

个字节的内容,在第八和第九个字节之间有一个连字符。

从键盘键入下面命令:-dcs:10010fDebug按以下格式显示地

址范围中的内容(假定CS=0AF6):

0AF6:010077616E677869616F-696A6BFF0E0001

FFwangxiaoijk键入以下命令,Debug将从CS:100开始显

示20h个字节的内容:-des:100120键入以下命令,Debug将

显示范围从DS段的100h到115h中所有字节的内容:-d

100115

注意:在D命令中若不指定段寄存器,默认规定为DS。

★E命令使用说明:当使用E命令时,有两种使用格式:1、用E

命令中包含的字节串替换从指定的地址开始的多个字节的内容;2、

E命令后不跟字节串,则允许按顺序方式显示和修改内存值,按下空

格键显示下一字节内容,若想修改,直接输入相应值;按下减号键显

示上一字节内容,若想修改,直接输入相应值。3、停止执行e命

令。按ENTER键。在任何字节位置都可以按ENTER0

注意:

1.若地址部分只输入偏移量,则E命令认为段包括在DS寄存器中。

2.[字节串]的值可以是十六进制字节或字符串。使用空格、逗号或

制表符来分隔值。必须将字符串包括在单或双引号中。

3.使用E命令后,内存单元中原来的数据将丢失,或者说被新输入

的数据覆盖。从键盘键入下面命令:-E100Debug按下面的格

式显示第一个字节的内容(假定DS=0AF6):0AF6:0100EB.要

将该值更改为61,请在插入点键入(使用符号表示)61,如下所

示:0AF6:0100AB.61_此时,若按下空格键,将显示下一个内存

单元中的内容:0AF6:0100AB.61EE_此时,又可以在插入点键入

新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的

内容,可以直接按下空格键,将显示下一个内存单元的内容,如此,一

直到按ENTER停止e命令并返回到Debug提示符下。若使用

减号键,操作和按下空格键一样,区别在于将显示上一个内存单元的

内容。

注意:使用该种方法,只能键入16进制数,不能键入字符串。

从键盘键入下面命令:

-EDS:100EFABC41

则执行上面的命令后,从DS:100内存单元开始的5个连续的字节

中的内容将被数据OEFH,字符“"旧“。的人5011码和数据41H

替换。

★F命令使用说明:如果[地址范围]包含的字节数比[字节或字节

串]中的数值大,Debug将对[字节或字节串]中提供的值反复使用,

直至IJ[地址范围]中的所有字节全部填充。如果在[地址范围]中的任何

内存单元损坏或不存在,Debug将显示错误消息并停止f命令。如

果[字节或字节串]包含的数值多于[地址范围]中的字节数,Debug

将忽略[字节或字节串]中额外的值。从键盘键入下面的命令:-F

1000:100105,ABCDEFG'指令执行后,DEBUG使用'ABCDEF

填充1000:100到1000:105内存单元。从键盘键入下面的命

令:1000:1001504045515244指令执行后,DEBUG反复

使用40,45,51,52,44填充从1000:100至U1000:150的

内存单元,直到50h个字节全部填满为止。

★G命令使用

说明:G命令中的=不能省略,可以只给出偏移地址,默认段地址为

当前的CS;若省略=,则该地址就成为G命令中的断点地址。程序

将从指定的开始地址不停的执行程序,一直到遇到结束指令为止,并

显示"Programterminatednormally”。断点地址只对本次G命令

有效;下一条G命令若需要断点地址,应重新进行指定。当使用G

命令执行程序到断电地址后,显示断点地址处的指令和寄存器的内容。

注意:断点地址应为一条指令在内存单元中的首字节地址。

★H命令使用

说明:Debug首先将指定的两个参数相加,然后用第一个参数中减

去第二个参数。并将计算的结果以4位16进制形式显示在下一行中:

先显示计算和,然后显示计算差。

从键盘键入下面的命令:

H1234

执行后,将在下一行显示:

0046FFDE

★I命令使用

说明:[端口地址]的分为应在0〜FFFFH的范围内。

从键盘键入下面的命令:

IFFFF

执行后,将在下一行显示(假定端口0FFFFH中的内容为FFH):

FF

★L命令使用说明:单个L命令能够装入的最大扇区数是80H,

其中盘号0,1,2,3.…分别代表A,B,C,……;若出现读盘错,

显示错误信息。只有加载特定扇区的内容而不是加载debug命令行

或最近的Debugn(名称)命令中指定的文件时,才能使用drive、

start和number参数。L命令使用情况,可以分为下列儿种情况:

1、使用不带参数的L命令当使用不带参数的L命令时,在debug

命令行上指定的文件将加载到从地址CS:100开始内存中。Debug

同时将BX和CX寄存器设置为加载的字节数(CX表示低位,BX

表示高位)。如果不在debug命令行指定文件,所装入的文件将是

最近使用n命令经常指定的文件。2、使用带有address参数的

L命令

使用带address参数的L命令,Debug将从内存位置address

开始加载文件或指定扇区的内容。???

3、使用带全部参数的L命令使用带所有参数的L命令,Debug将

加载指定磁盘扇区的内容而不是加载文件。加载特定扇区的内容,指

定范围内的每个扇区均从drive读取。Debug从start开始加载,

直到在number中指定的扇区数中的内容全部被加载。从键盘键

入如下命令(假定文件abc.exe存在当前目录之下):N

wangxiao.exeL

则把文件wangxiao.exe加载到CS:100开始的内存单元中。若要

将文件加载到1000:100开始内存单元中,键入:L1000:100

★M命令使用

说明:传送期间,源数据区和目标数据区可以部分重叠;传送后源区

数据保持不变,目的区的数据将使用源区中的数据进行改写。

从键盘键入如下命令:一MCS:100150DS:500

执行该指令,Debug首先将CS:150地址中的内容复制到地址

DS:550中,然后将CS:14F地址中的内容复制到CS:54F中,

如此操作直至将CS:100地址中的内容复制到地址DS:500中。

★N命令使用

说明:可同时定义两个操作文件,并将形成的文件控制块相应的设置

在内存CS:5c和CS:6c上,供以后的L和W命令操作之用。N

命令的两个用途:

1、可以使用N为后面的L(加载)或W(写入)命令指定所使用

的文件。

2、可以使用N命令指定正在被调试文件的命令行参数和开关。

如下所示:假定在Debug中正在调试的程序。若

想为指定两个参数并运行此程序。可以键入如下的

命令:一Nparam1,param2-G从键盘键入如下的命令序列:

-Nwang.exe-L-Nxiaol.datxiao2.dat-G则第一个N命令

将wang.exe指定为后接的L(加载)命令的文件,该命令将

wang.exe加载到内存。第二个N命令指定wang.exe将使用的

参数。最后G命令将使用参数xiaol.dat和xiao2.dat运行

wang.exe文件。此功能如同在DOS命令行中键入了wang.exe

xiaol.datxiao2.dat。注意:不要在N命令的第二种形式后再次

使用L命令,否则N命令的第二种形式中指定的参数将不起作用。

此外,如果在N命令的第二种形式后使用W(写入)命令,将使用

名称xiao2.dat保存正在调试的文件wang.exe。每次使用N命

令,都将影响下面的四个内存区域:内存位置内容CS:5c文件1

的文件控制数据块(FCB)CS:6C文件2的文件控制数据块

(FCB)CS:80N命令行的长度(以字符表示)CS:81N命令行字

符的开头N命令指定的第一个文件名被放在CS:5C的FCB中。

如果指定第二个文件名,第二个文件文将放置到CS:6c的FCB中。

N命令行上键入的字符数(除第一个字符N之外)存储在位置CS:80。

N命令行上的实际字符(再次,除了字母N之外)存储在以CS:81

开头的位置。★0命令使用

说明:[端口地址]的分为应在。〜FFFFH的范围内,[数据]应为字节

数据。

从键盘键入下面的命令;

-o73FF

指令执行后,端口73H中的数据为OFFHo

★P命令使用

说明:使用P命令执行程序,该程序不间断运行,直到循环、重复字

符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执

行了指定数量的机器指令为止。若被执行的指令不是循环、重复的字

符串指令、软件中断或子程序,则P命令与T(跟踪)命令的作用

相同。考虑程序在地址CS:168F处有一个call指令。要运行完

call目标位置的子程序然后将控制返回Debug,从键盘键入下面命

令:P=168F执行指令后,按如下格式显示结果:AX=0000

BX=0000CX=0000DX=0000SP=0000BP=0000SI=0000

DI=0000DS=0AF6ES=0AF6SS=0AF6CS=0AF6IP=1692

NVUPElPLNZACPONC

0AF6:1692BA2601MOVAX,0126

★Q命令使用

-Q

执行该命令后,结束DEBUG,返回DOS。

★R命令使用说明:可以使用的寄存器名有:AX、BX、CX、DX、

SP、BP、SLDI、DS、ES、SS、CS、IP、PC及F。键入R命

令不跟任何可用的寄存器名,则将显示所有的寄存器的内容以及

CS:IP指向的存储单元中的内容;若键入R命令指定了寄存器名称,

将以十六进制数形式显示该寄存器中的内容,下一行显示冒号提示符,

在冒号提示符后面可以为寄存器键入新的数据。若不需要修改寄存器

的数据,直接按ENTER键返回Debug提示符。如果键入f字符

代替寄存器名,Debug将每个标记的当前设置显示为两字母代码,

然后显示Debug提示符。要更改标志的设置,请从下表中键入适当

的两字母代码;若不需要修改,直接ENTER键返回Debug提示

符。可以修改全部或部分标志位,可以按任何顺序键入新的标志值。

不需要在这些值之间留出空格。任何没有指定新值的标志保持不变。

在DEBUG下,标志位表示如下:标志名标志为1标志为OOFOV

NVDFDNUPIFEIDISFNGPLZFZRNZAFACNAPFPEPO

CFCYNC注意:若输入的寄存器名不在上面的有效寄存器名之内,

将显示:bferrorR命令后只能跟一个有效的寄存器名。修改标志

位如果指定没有在前面的表中列出的标志代码,将显示:bferror

若为一个标志位指定了多个值,Debug将显示以下消息:dferror

要只查看标志的状态,键入以下命令:-RF将按如下格式显示:NV

UPDINGNZACPENC-_此时可以按任意顺序键入一个或多个

有效的标志值,其中可以有或没有空格,如下所示:NVUPDING

NZACPENC-PLEICY执行指令后,将使用新的标志位数值代替

旧值。要查看当前所有寄存器的取值、所有标志位的内容和CS:IP

指向的内存单元指令,键入以下命令:-R如果当前位置是

CS:1692,显示外观将类似于以下内容:AX=OOOOBX=OOOO

CX=OOOODX=OOOOSP=OOOOBP=OOOOSI=OOOODI=OOOO

DS=0AF6ES=0AF6SS=0AF6CS=0AF6IP=1692NVUPEl

PLNZACPONC0AF6:1692BA2601MOVAX,0126从键盘

上键入如下命令:一RCX执行后,将显示:CX0000:在冒号

后可以位CX键入新值,若不需要改变,直接按ENTERo★S命

令使用

说明:若在给定的分为内要搜索字节出现多次,将显示出所有地址。

隐含地址为DS段值。假定从范围DS:100到DS:110查找是否

包含61,键入下面命令:一S10011061执行程序后,显示:

0AF6:010A0AF6:010F-若要在范围CS:100至ijCS:200内

搜索字符串“wangxiao",键入下面的命令:一SCS:100CS:200

'wangxiao'

★T命令使用

说明:通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟

踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状

态以及下一条指令在内存中的保存情况。T命令若不跟[=地址]参数,

则从当前CS:IP处开始执行,第一次键入的T命令从CS:100处开

始执行程序。T命令默认寄存器位CS。参考P命令。

键入下面得到命令:

—T

若是第一次执行,则显示:AX=OOOOBX=OOOOCX=OOOO

DX=OOOOSP=FFEEBP=OOOOSI=OOOODI=OOOODS=0AF6

ES=0AF6SS=0AF6CS=0AF6IP=0103NVUPElPLNZAC

PONC

0AF6:0103BA2601MOVAX,0126

若要从CS:200处开始执行程序,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论