七月网

debug命令(debug命令大全及用法)

七月网1240

一、求debug命令详解

功能:将输入源程序的指令汇编成目标代码并从指定地址单元开始存放。若缺省

debug命令(debug命令大全及用法)

起始地址,则从当前CS:100地址开始存放。A命令按行汇编,主要是用于小段

程序的汇编或对目标程序的修改。

格式2:U[起始地址][结束地址|字节数]

功能:格式1从指定起始地址处开始将32个字节的目标代码转换成汇编指令形

式,缺省起始地址,则从当前地址CS:IP开始。

格式2将指定范围的内存单元中的目标代码转换成汇编指令。

功能:若给出寄存器名,则显示该寄存器的内容并可进行修改。缺省寄存器名,

则按以下格式显示所有寄存器的内容及当前值(不能修改)。

AX=0000 BX=0004 CX=0020 DX=0000 SP=0080 BP=0000 SI=0000

DI=0000 DS=3000 ES=23A0 CS=138E IP=0000

若对标志寄存器进行修改,输入:-RF

屏幕显示如下信息,分别表示OF、DF、IF、SF、ZF、AF、PF、CF的状态。

不修改按回车键。要修改需个别输入一个或多个此标志的相反值,再按回车键。

R命令只能显示、修改16位寄存器。

格式2:D[起始地址][结束地址|字节数]

功能:格式1从起始地址开始按十六进制显示80H个单元的内容,每行16个单

元,共8行,每行右边显示16个单元的ASCII码,不可显示的ASCII码则显示

“·”。格式2显示指定范围内存储单元的内容,其他显示方式与格式1一样。

如果缺省起始地址或地址范围,则从当前的地址开始按格式1显示。

例如:-D 200;表示从DS:0200H开始显示128个单元内容

-D 100 120;表示显示DS:0100-DS:0120单元的内容

说明:在DEBUG中,地址表示方式有如下形式:

段寄存器名:相对地址,如:DS:100

段基值:偏移地址(相对地址),如:23A0:1500

功能:格式1按内容表的内容修改从起始地址开始的多个存储单元内容,即用内

容表指定的内容来代替存储单元当前内容。

例如:—E DS:0100'VAR' 12 34

表示从DS:0100为起始单元的连续五个字节单元内容依次被修改为

'V'、'A'、'R'、12H、34H。

格式2是逐个修改指定地址单元的当前内容。

其中156F:0010单元原来的值是41H,5FH为输入的修改值。若只修改一个单元

的内容,这时按回车键即可;若还想继续修改下一个单元内容,此时应按空格键,

就显示下一个单元的内容,需修改就键入新的内容,不修改再按空格跳过,如此

重复直到修改完毕,按回车键返回DEBUG“-”提示符。如果在修改过程中,将

空格键换成按“-”键,则表示可以修改前一个单元的内容。

格式:G[=起始地址][第一断点地址[第二断点地址……]]

功能:CPU从指定起始地址开始执行,依次在第一、第二等断点处中断。若缺省

起始地址,则从当前CS:IP指示地址开始执行一条指令。最多可设置10个断点。

功能:从指定地址开始执行‘正整数’条指令,若缺省‘正整数’,表示执行一

条指令,若两项都缺省,表示从当前CS:IP指示地址开始执行一条指令。

功能:指定即将调入内存或从内存写入磁盘的文件名。该命令应该用在L命令和

格式1:L[起始地址][盘符号][扇区号][扇区数]

功能:格式1根据盘符号,将指定扇区的内容装入到指定起始地址的存储区中。

格式2将N命令指出的文件装入到指定起始地址的存储区中,若省略起始地址,

则装入到CS:100处或按原来文件定位约定装入到相应位置。

格式1:W<起始地址>[驱动器号]<起始扇区><扇区数>

功能:格式1把指定地址开始的内容数据写到磁盘上指定的扇区中。

格式2将起始地址的BX×10000H+CX个字节内容存放到由N命令指定的文件中。

在格式2的W命令之前,除用N命令指定存盘的文件名外,还必须将要写的字节

功能:退出DEBUG,返回到操作系统。

以上介绍的是DEBUG常用命令,其他命令请参考有关书籍。

二、debug命令怎么用是干什么的

DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。

⒈直接输入,更改,跟踪,运行汇编语言源程序;

⒌以扇区或文件的方式读写软盘数据。

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

说明:用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。

08F1:0107 INT 21H;<-XP下运行cmd debug时,应该是INT 20H,21H会出遇无效指令错误

08F1:0109 db'May I help you$'

Program terminated normally表示运行正常

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

就是用来比较4000:0000-4000:003F与DS:0100-DS:013F之间的内容:其显示格式如下:

内存地址1内含值1内含值2内存地址2

例:比较4000:0 3F 100内容的差异

4000:0001 3E 69 08F1:0101显示内容的差异处

如果要比较的范围在DS内,则段地址不必指出:

如:-C 0 4 100;比较DS:0---DS:4与DS:100---DS:104

C命令的另一种格式如下:C地址1 L长度地址2

如:-C000:0 L4 0;由0000:0与与DS:0开始比较它同-C0000:0 3 0命令相等,显示结果如下:

0000:0001 10 20 08F1:0001它们都比较4个字节

* D[地址]或D[起始地址][目的地址]转储命令

功能:以内存映象方式显示内存中的信息。

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

例:-d10,4f即为显示DS:4f的内容在D命令中如不指出段地址,则其默认为DS段。

如指明段地址,则从指明的段地址列出指定的范围

我们也可以指定长度来列出所需要内存内容

如:-d 100 L20即为显示由DS:100-DS:11F的内容,共20H个字节:

* E[地址][字节串)修改内存命令

功能:从指定的地址开始修改内存值。

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

例:-E100 41 42 43 44 48 47 46 45

08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…

08F1:0100 76 42:42是操作员键入

此命令是将原100号内存内容76修改为42,用D命令可察看。

* F[地址范围][字节或字节串]填写命令

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

08F1:0100 61 62 63 64 61 62 63 64-61 62 63 64 61 62 63 abcd abcd abcd abcd

08F1:0110 13 67 98 E3 C8 2E B3 B6-03 21 AC 19 3121 4E 96 g……1…

如果数据行超出指定的范围,则填不下的数值会被忽略。

例:-f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4C 4D-d 100,lof

08F1:0100 41 42 43 44 45 46 47 64-61 62 63 64 ABCDEFGdabcdabcd

由上例可看出,超出范围的数据被忽略

另外,F和E命令都可填入字符串:

08F1:0100 4D 53 44 4F 53 46 47 64-61 62 63 64 MS DOS FGabcd abcd

功能:执行正在调试的程序,当达到断点时停止执行,并且显示寄存器标志和下一条要执行的命令。

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

另外:我们在DEBUG下可运行一个文件.EXE

即可开始运行此程序,和在DOS下完全一样:

* H[数值][数值]十六进制算术运算命令

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

说明:替用户完成简单的十六进制数的运算。

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

I命令可由80X86的64K个端口取数据

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

说明:单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……出现读盘错,显示错误信息。

⑴格式1.L装入地址驱动器名起始扇区/扇区数

这种方式可把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中,在此外扇区编号引用逻辑/扇区的方式。

例:-L 100 0 01,将A驱的0扇区装至CS:100上

08F1:0100 EB 3C 90 3C 53 44 4F 53-36 2E 32 32 02 01 01 00.L,MSDOS 6.22……

这种方式可把指定文件装入内存,装入的文件可在进入DEBUG时指定亦可用N命令建立,格式为-n文件名:

须知:L命令只能读取逻辑扇区,不能读取硬盘分区表

L命令中所用的磁盘代码A=00,B=01,C=02……

三、debug命令的详细用法

debug命令DEBUG命令参数详解DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。它的功能包括以下几个方面。1,直接输入,更改,跟踪,运行汇编语言源程序;2,观察操作系统的内容;3,查看ROMBIOS的内容;4,观察更改RAM内部的设置值;5,以扇区或文件的方式读写软盘数据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号地址的数据,那么这个命令可以用以下任一种形势输入:D100D100D。100D,100如果输入的命令中出现了错误,DEBUG将在下一行对着错误的位置标记出来,例如:-s100d12^ErrorDEBUG的命令及功能如下:*A[地址]汇编命令功能:将指令直接汇编成机器码输入到内存中。说明:用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,改语句被汇编到CS:0100区域。例A:>DEBUG-a010008F1:0100MOVAH,0908F1:0102MOVDX,10908F1:0105INT21H;08F1:0107INT21H;debugtan.exe-u:反编译成汇编语言程码…………..-g100指定中断点Programterminatednormally:另外:我们在DEBUG下可运行一个文件.EXE如:A:\>debugtan.exe-g即可开始运行此程序,和在DOS下完全一样:*H[数值][数值]十六进制算术运算命令功能:分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。说明:替用户完成简单的十六进制数的运算。例:-h453856239B5BEF15*I[端口地址]功能:从指定的端口输入并显示(用十六进制)的一个字节。例:-i70F9;显示70端口的内容为F9I命令可由80X86的64K个端口取数据*L[地址][盘号:][逻辑扇区号][扇区数]功能:将一个文件或盘的绝对扇区装入存储器。说明:单个L命令能够装入的最大扇区数是80H,其中盘号0,1,2,3……分别代表A,B,C,……出现读盘错,显示错误信息。(1)格式1.L装入地址驱动器名起始扇区/扇区数这种方式可把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中,在此外扇区编号引用逻辑/扇区的方式。例:-L100001,将A驱的0扇区装至CS:100上-d10010f08F1:0100EB3C903C53444F53-362E323202010100.L,MSDOS6.22……(2)格式2:L装入地址这种方式可把指定文件装入内存,装入的文件可在进入DEBUG时指定亦可用N命令建立,格式为-n文件名:例1DEBUGtan.pas-L100例2DEBUG-ntan.pas-L100须知:L命令只能读取逻辑扇区,不能读取硬盘分区表L命令中所用的磁盘代码A=00,B=01,C=02……*M[地址范围][起始地址]数据传送命令功能:把地址范围内的存储器单元的内容移到起始地址的指定地址中说明:传送期间,源区和目标区可以部分重叠;传送后源区域数据保持不变。例:-e1004142434445-d10010f08F1:0100414243444562626364-6162636461626364ABCDEBCDABCDABCD-M100104110-d110L1F08F1:0100414243450A2119-200101200796879FABCDE……*N[盘号:][路径][文件名][扩展名]功能:定义操作文件名。说明:可同时定义两个操作文件,并将形成的文件控制块相应的设置在内存CS:5C和CS:6C上,供以后的L和W命令操作之用。我们在运行程序侦错时,在启动DEBUG时在其后加文件程序名以及该程序的参数或运行文件,但当我们侦错一段后,可能装入其它文件来测试,这时我们可利用N命令来设置而无需退出DEBUG。例:A:\>DEBUGtan.exe-nyoug.pas当程序侦错一段时间后,若要把tan.exe装入tan1.pas则-ntanl.pas*O[端口地址][数据]输出命令功能:发送字节到指定的输出端口。例:当我们遇到开机要求输入口令时,可用如下方式取消-O7010_O7100*P[=地址][数据]进程命令功能:将一个子程序调用指令,循环指令,中断指令或一个重复字符串指令,停止在下一条指令上。说明:在执行一条子程序调用指令,循环指令,中断指令或一个重复字符串指令时,发出P命令去执行有关指令,并且返回到要执行的下一条指令。P命令和T一样选用来跟踪程序运行过程用的命令,我们可以在P命令中指定程序运行的起始地址,指令个数,如未指定则CS:IP所指定程序的地址开始一次运行一条令。P与T命令的差别在于P命令把CALL/INT当成一条指令来执行,简化了跟踪过程,P命令只运行RAM内存的命令,而T命令则可运行RAM和ROM里的程序。*Q退出命令。*R[寄存器]寄存器命令功能:一,显示单个寄存器的内容,并提供修改功能。二,显示所有寄存器内容,再加上字母标志位状态以及要执行的下一条指令。三,显示8个标志位状态,并提供修改功能。若不想改变则回车即可。例:-rbxbx0050:51-rAX=0000BX=0051CX=0000SP=FFEEBP=0000SI=0000DI=0000DS=0003ES=0CD3SS=0CD3IP=0100NVUPEIPLNZNAOPNC0CD3:01000FDBOF若想改变标志寄存器,用-RF回车,则DEBUG会将标志内容显示出来,若想改变任一标志,只要输入该标志的名称即可。标志名称设置未设置标志名称设置未设置滋出OV(未溢出)NV(未溢出)零位ZRNZ(不等于零)方向DN(减少)UP(增加)辅助进位ACNA(无进位)中断EI(许可)DI(禁止)奇偶标志PE(偶)PO(奇)符号NG(负)PL(正)进位CYNC(清除进位)例:-RfNVUPEIPLNZNAPONC:-OVDI←输入值*S[地址范围][字符串]功能:在指定的地址范围内查找给定的字符串。说明:用来指定在地址范围内查找一个字符串,若找到则显示其地址,否则直接显示DEBUG提示符。隐含地址为DS段值。在此内存可以用(起始地址)(终止地址)或(起始地址)L(长度)的方式来表示,而字符串与数据行则可混合使用:如:02.76"BC"。例:-d100lof08F1:0100OF2A41430B314296-FFF0B98AF300B1..AC,1B-S100lof"AC"08F1:0102←表示找到,由0102开始,*T[=地址][指令条数]跟踪命令功能:逐条跟踪程序的执行,每条指令执行后都将显示各寄存器的内容。说明:通常采用跟踪一条指令,但用户也可以用指令条数设定一次跟踪多条指令,每执行一条指令之后,显示所有寄存器的内容和标志状态。逐条指令跟踪-T[=起始地址]从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值,如来指定地址则从当前CS:IP开始执行。A:\>DEBUG-A08F1:0100MOVDL,03H08F1:0102MOVAH,02H08F1:0104INT21H08F1:0106INT20H08F1:0108-TAX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=08F1ES=08F1SS=08F1CS=08F11P=0105NVUPEIPLNZPOCY09F1:0102B402MOVAH,02若指定起始地址,则T命令会从指定的地址开始跟踪,我们还可以指定跟踪一次所运行指令的个数,用Ctrl+S暂停屏幕的显示,以便观察。-t=10010;由CS:100开始跟踪10条指令*U[起始地址]或者[地址范围]功能:将内存中的内容转换为汇编语句。说明:反汇编的字节数取决与用户的系统显示形式,以及在U命令中使用的可选项。(1)从指定地址开始编译,反汇编32个字节-U[地址]←从CS:100开始,其反汇编32个字节如果地址被省略,则从一个U命令的最后一条指令的下一条单元开始汇编32个字节。(2)对指定的存贮范围进行反汇编-u起始地址终止地址(L长度)例:-U10010908F1:0100CD20INT2008F1:0102FF9F009ACALLFA12[BX+9A00]08F1:0106F0LOCK08F1:0107FE1DCALLFAR[DI]08F1:0109F0LOCK说明:如指定了范围则整个范围全都会被反编译*W[地址][盘符:][起始扇区][扇区数]写盘命令功能:将修改过的数据写到磁盘上。说明:可以将指定内存地址开始的数据写在磁盘上,可以在没有指定参数,或指定地址参数的情况下,将调试文件写在磁盘上。在运行W时需设置文件的大小CX或BX寄存器(1)把数据写入磁盘的指定扇区-W起始地址驱动器名起始扇区扇区数(2)把数据写入指定文件中-W起始地址例A:\>DEBUG-A08f1:0100..写入程序段08F1:012A.-RCXCX:0000:2A←写入字节数,即为程序结尾地址减起始地址-ntan.com←设置文件名,需后缀为com-wWring002Abytes-qA:\>TAN←即可执行此程序*"XD"命令:释放EMS内存例:-XD0001handle0001deallocatel←释放了利用XD释放后可再分配*"XM"命令;把扩充内存上的内存页区映射到主内存区格式:XMRAM长页码主内存页码句柄例:-XM320001←把0001号句柄的第3号逻辑页区映射到2号真实页区Logicalpage03mappedtophysicalpage02*"XS"命令:显示当前EMS使用情况。格式-XS实用debug命令集锦1.非物理0磁道坏软盘的修复此种损坏从软盘盘面上来看并没有明显的划伤和霉变。一般可以恢复其数据,也可是软盘重新在利用。处理方法如下:ⅰ.进入debugⅱ.取一张引导区没有损坏的好磁盘,插入软驱-l100001ⅲ.插入损坏的磁盘到软驱-w100001-q注意:好盘与坏盘容量必须相同2.物理0磁道坏软盘中的数据读取对于0磁道损坏的磁盘,一般来说是应该抛弃了,当你也不妨试一试已下方法:磁化处理:用较强的磁铁在靠近坏磁盘的表面处反复移动,切不可碰到磁盘介质,以免划伤表面,然后在试试格式化。软盘换面:小心的将磁盘打开,坚磁片与金属芯片分开,方面后再按原来的方法粘在一起即可,在重新格式化。diskfix:对于diskfix想必大家都用的比较多了,里面的磁盘修复功能很好用的。能修复大多数磁盘表面错误。

关于debug命令和debug命令大全及用法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。