debug命令怎么用?是干什么的?
发布网友
发布时间:2022-04-29 05:27
我来回答
共8个回答
热心网友
时间:2022-04-11 00:37
DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。
它的功能包括以下几个方面。
⒈ 直接输入,更改,跟踪,运行汇编语言源程序;
⒉ 观察操作系统的内容;
3.查看ROM BIOS的内容;
⒋观察更改RAM内部的设置值;
⒌以扇区或文件的方式读写软盘数据。
A 汇编命令
功能: 将指令直接汇编成机器码输入到内存中。
说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到 CS:0100区域。
例A:>DEBUG
-a 0100
08F1:0100 MOV AH,09
08F1:0102 MOV DX,109
08F1:0105 INT 21H;
08F1:0107 INT 21H;<-XP下运行cmd debug时,应该是INT 20H,21H会出遇无效指令错误
08F1:0109 db 'May I help you $'
08F1:0115←离开a状态
-g ←运行
May I help you 运行结果
Program terminated normally表示运行正常
C比较命令
功能: 比较两内存区域中的内容是否相同,若不同则显示其地址和内容。
如:C4000:0 3F 100
就是用来比较4000:0000-4000:003F与DS:0100-DS:013F之间的内容:其显示格式如下:
内存地址1内含值1内含值2内存地址2
例:比较4000:0 3F 100内容的差异
-C4000:0 3F 100
4000:0000 64 43 08F1:0100
4000:0001 3E 69 08F1:0101 显示内容的差异处
4000:0002 78 FF 08F1:0102
……………………………………
如果要比较的范围在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:0000 8A C0 08F1:0000
0000:0001 10 20 08F1:0001 它们都比较4个字节
0000:0002 1C 00 08F1:0002
0000:0003 49 7F 08F1:0003
转储命令
* D[地址] 或D[起始地址][目的地址] 转储命令
功能: 以内存映象方式显示内存中的信息。
说明: 转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCⅡ字符显示,所有不可打印字符用句号(。)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符 - 此命令隐含的段地址为DS的值。若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令, 则从初使化的段寄存器的内容,加上地址偏移量 0100H 开始显示。
例:-d10,4f即为显示DS:4f的内容在D命令中如不指出段地址,则其默认为DS段。
如指明段地址,则从指明的段地址列出指定的范围
如:-dfff:00:0f
我们也可以指定长度来列出所需要内存内容
如:-d 100 L20即为显示由DS:100-DS:11F的内容,共20H个字节:
* E[地址] [字节串) 修改内存命令
功能: 从指定的地址开始修改内存值。
格式:E起始地址[数据行]
⑴用给定内容代替指定范围的单元内容
-E地址 内容表
例:-E100 41 42 43 44 48 47 46 45
-D 100,L08
08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…
⑵逐个内存内容
例:-E 100:
08F1:0100 76 42 :42是操作员键入
此命令是将原100号内存内容76修改为42,用D命令可察看。
* F[地址范围] [字节或字节串] 填写命令
功能: 将要填写的字节或字节串填入由地址范围指定的存储器中。
例:-f100 120 61 62 63 64
-d100 11f
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命令都可填入字符串:
如:-F 100 105 "MSDOS"
-d 100 l0f
08F1:0100 4D 53 44 4F 53 46 47 64 -61 62 63 64 MS DOS FGabcd abcd
G执行命令
功能: 执行正在调试的程序,当达到断点时停止执行, 并且显示寄存器标志和下一条要执行的命令。
说明: 如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。
例:A:\>debug tan.exe
-u:反编译成汇编语言程码
…………
. .
-g 100 指定中断点
Program terminated normally:
另外:我们在DEBUG下可运行一个文件.EXE
如:A:\>debug tan.exe
-g
即可开始运行此程序,和在DOS下完全一样:
* H[数值][数值] 十六进制算术运算命令
功能: 分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明: 替用户完成简单的十六进制数的运算。
例:-h4538 5623
9B5B EF15
I命令
功能: 从指定的端口输入并显示(用十六进制)的一个字节。
例:-i70
F9;显示70端口的内容为F9
I命令可由80X86的64K个端口取数据
L命令
功能: 将一个文件或盘的绝对扇区装入存储器。
说明: 单个L命令能够装入的最大扇区数是 80H,其中盘号 0,1,2,3……分别代表 A,B,C,……出现读盘错,显示错误信息。
⑴格式1.L装入地址 驱动器名 起始扇区/扇区数
这种方式可把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中,在此外扇区编号引用逻辑/扇区的方式。
例:-L 100 0 01,将A驱的0扇区装至CS:100上
-d 100 10f
08F1:0100 EB 3C 90 3C 53 44 4F 53 -36 2E 32 32 02 01 01 00.L,MSDOS 6.22……
⑵格式2:L装入地址
这种方式可把指定文件装入内存,装入的文件可在进入DEBUG时指定亦可用N命令建立,格式为-n文件名:
例1 DEBUG tan.pas
-L 100
例2 DEBUG
-n tan.pas
-L 100
须知:L命令只能读取逻辑扇区,不能读取硬盘分区表
L命令中所用的磁盘代码A=00,B=01,C=02……
热心网友
时间:2022-04-11 01:55
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 显示扩展内存的状态。
热心网友
时间:2022-04-11 03:29
DEBUG是一个DOS实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围,读写文件与磁盘扇区。
它的功能包括以下几个方面。
⒈
直接输入,更改,跟踪,运行汇编语言源程序;
⒉
观察操作系统的内容;
3.查看ROM
BIOS的内容;
⒋观察更改RAM内部的设置值;
⒌以扇区或文件的方式读写软盘数据。
A
汇编命令
功能:
将指令直接汇编成机器码输入到内存中。
说明:
用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制,
用户装入内存的汇编语句是连续存放的,若没有指定地址,并且前面没有使用汇编命令,该语句被汇编到
CS:0100区域。
例A:>DEBUG
-a
0100
08F1:0100
MOV
AH,09
08F1:0102
MOV
DX,109
08F1:0105
INT
21H;
08F1:0107
INT
21H;<-XP下运行cmd
debug时,应该是INT
20H,21H会出遇无效指令错误
08F1:0109
db
'May
I
help
you
$'
08F1:0115←离开a状态
-g
←运行
May
I
help
you
运行结果
Program
terminated
normally表示运行正常
C比较命令
功能:
比较两内存区域中的内容是否相同,若不同则显示其地址和内容。
如:C4000:0
3F
100
就是用来比较4000:0000-4000:003F与DS:0100-DS:013F之间的内容:其显示格式如下:
内存地址1内含值1内含值2内存地址2
例:比较4000:0
3F
100内容的差异
-C4000:0
3F
100
4000:0000
64
43
08F1:0100
4000:0001
3E
69
08F1:0101
显示内容的差异处
4000:0002
78
FF
08F1:0102
……………………………………
如果要比较的范围在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:0000
8A
C0
08F1:0000
0000:0001
10
20
08F1:0001
它们都比较4个字节
0000:0002
1C
00
08F1:0002
0000:0003
49
7F
08F1:0003
转储命令
*
D[地址]
或D[起始地址][目的地址]
转储命令
功能:
以内存映象方式显示内存中的信息。
说明:
转储用左右两部分显示内存映象内容,左边以十六进制,右边以ASCⅡ字符显示,所有不可打印字符用句号(。)表示。每行显示16个字节的内容,在第八和第九个字节之间有一个连字符
-
此命令隐含的段地址为DS的值。若未指定起始地址,则D命令从显示的最后一个单元的下一个单元开始显示,若以前没有使用给D命令,
则从初使化的段寄存器的内容,加上地址偏移量
0100H
开始显示。
例:-d10,4f即为显示DS:4f的内容在D命令中如不指出段地址,则其默认为DS段。
如指明段地址,则从指明的段地址列出指定的范围
如:-dfff:00:0f
我们也可以指定长度来列出所需要内存内容
如:-d
100
L20即为显示由DS:100-DS:11F的内容,共20H个字节:
*
E[地址]
[字节串)
修改内存命令
功能:
从指定的地址开始修改内存值。
格式:E起始地址[数据行]
⑴用给定内容代替指定范围的单元内容
-E地址
内容表
例:-E100
41
42
43
44
48
47
46
45
-D
100,L08
08F1:0100
41
42
43
44
48
47
46
45
ABCDHGFE…
⑵逐个内存内容
例:-E
100:
08F1:0100
76
42
:42是操作员键入
此命令是将原100号内存内容76修改为42,用D命令可察看。
*
F[地址范围]
[字节或字节串]
填写命令
功能:
将要填写的字节或字节串填入由地址范围指定的存储器中。
例:-f100
120
61
62
63
64
-d100
11f
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命令都可填入字符串:
如:-F
100
105
"MSDOS"
-d
100
l0f
08F1:0100
4D
53
44
4F
53
46
47
64
-61
62
63
64
MS
DOS
FGabcd
abcd
G执行命令
功能:
执行正在调试的程序,当达到断点时停止执行,
并且显示寄存器标志和下一条要执行的命令。
说明:
如果没有指定起始地址,那么当前指令地址由CS,IP寄存器的内容来决定,如果用户指定起始地址就从指定的起始地址开始执行。如果指定断点,当指令到达指令地址时停止执行,并显示各寄存器标志位的内容和下一条要执行的命令,最多允许用户设定10个断点。
例:A:\>debug
tan.exe
-u:反编译成汇编语言程码
…………
.
.
-g
100
指定中断点
Program
terminated
normally:
另外:我们在DEBUG下可运行一个文件.EXE
如:A:\>debug
tan.exe
-g
即可开始运行此程序,和在DOS下完全一样:
*
H[数值][数值]
十六进制算术运算命令
功能:
分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。
说明:
替用户完成简单的十六进制数的运算。
例:-h4538
5623
9B5B
EF15
I命令
功能:
从指定的端口输入并显示(用十六进制)的一个字节。
例:-i70
F9;显示70端口的内容为F9
I命令可由80X86的64K个端口取数据
L命令
功能:
将一个文件或盘的绝对扇区装入存储器。
说明:
单个L命令能够装入的最大扇区数是
80H,其中盘号
0,1,2,3……分别代表
A,B,C,……出现读盘错,显示错误信息。
⑴格式1.L装入地址
驱动器名
起始扇区/扇区数
这种方式可把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中,在此外扇区编号引用逻辑/扇区的方式。
例:-L
100
0
01,将A驱的0扇区装至CS:100上
-d
100
10f
08F1:0100
EB
3C
90
3C
53
44
4F
53
-36
2E
32
32
02
01
01
00.L,MSDOS
6.22……
⑵格式2:L装入地址
这种方式可把指定文件装入内存,装入的文件可在进入DEBUG时指定亦可用N命令建立,格式为-n文件名:
例1
DEBUG
tan.pas
-L
100
例2
DEBUG
-n
tan.pas
-L
100
须知:L命令只能读取逻辑扇区,不能读取硬盘分区表
L命令中所用的磁盘代码A=00,B=01,C=02……
热心网友
时间:2022-04-11 05:37
修复安装你电脑比如出什么问题了,DLL什么被误删导致开不了机这时就需要用系统盘进入故障恢复台修复安装
热心网友
时间:2022-04-11 08:02
debug是一个dos实用程序,是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。
热心网友
时间:2022-04-11 10:43
debug是一个隐藏的对象,用于进行和调试相关的工作。
有点类似于C#中的控制台。
在调试程序的时候使用Debug会很方便。
比如Debug.Print a
会在VB界面下方的“立即”窗口中显示出a的值,这样你就不必修改程序的界面来显示a或者中断程序来查看a。
再比如当你在某处需要a>5的时候,你可以加一句Debug.Assert(a>5)
当a<=5的时候程序执行到此处就会暂停,然后你就可以查看a为何没有满足a>5的条件,从而找到代码错误。
Debug的一个重要优点是,当你把程序编译成成品EXE之后,这些Debug语句都被剔除,也就是说你在程序中加入Debug语句并不会影响最终成品的效率和界面。Debug只是为调试人员存在的。
热心网友
时间:2022-04-11 13:41
http://zhidao.baidu.com/question/9749627.html?fr=qrl&fr2=query
热心网友
时间:2022-04-11 16:56
DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。
一、DEBUG程序的调用
在DOS的提示符下,可键入命令:
C:\DEBUG [D:][PATH][FILENAME[.EXT]][PARM1][PARM2]
其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。
在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。
二、DEBUG的主要命令
1、显示存储单元的命令D(DUMP),格式为:
_D[address]或_D[range]
例如,按指定范围显示存储单元内容的方法为:
-d100 120
18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G...
18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW.
7
18E4:0120 8B
其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。
2、修改存储单元内容的命令有两种。
·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:
-E address[list]
例如,-E DS:100 F3'XYZ'8D
其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。
第二种格式则是采用逐个单元相继修改的方法。命令格式为:
-E address
例如,-E DS:100
则可能显示为:
18E4:0100 89.-
如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:
18E4:0100 89.78 1B.-
这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。
·填写命令F(FILL),其格式为:
-F range list
例如:-F 4BA:0100 5 F3'XYZ'8D
使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。
3)检查和修改寄存器内容的命令R(register),它有三种格式如下:
·显示CPU内所有寄存器内容和标志位状态,其格式为:
-R
例如,-r
AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC
18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000
·显示和修改某个寄存器内容,其格式为:
-R register name
例如,键入
-R AX
系统将响应如下:
AX F1F4
:
即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:
-R bx
BX 0369
:059F
则把BX寄存器的内容修改为059F。
·显示和修改标志位状态,命令格式为:
-RF系统将响应,如:
OV DN EI NG ZR AC PE CY-
此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:
OV DN EI NG ZR AC PE CY-PONZDINV
即可,可见键入的顺序可以是任意的。
4)运行命令G,其格式为:
-G[=address1][address2[address3…]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
5)跟踪命令T(Trace),有两种格式:
·逐条指令跟踪
-T [=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。
·多条指令跟踪
-T [=address][value]
从指定地址起执行n条指令后停下来,n由value指定。
6)汇编命令A(Assemble),其格式为:
-A[address]
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。
7)反汇编命令U(Unassemble)有两种格式。
·从指定地址开始,反汇编32个字节,其格式为:
-U[address]
例如:
-u100
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
18E4:0112 BBO4O2 MOV BX,0204
18E4:0115 E80200 CALL 011A
18E4:0118 CD20 INT 20
18E4:011A 50 PUSH AX
18E4:011B 51 PUSH CX
18E4:011C 56 PUSH SI
18E4:011D 57 PUSH DI
18E4:011E 8B37 MOV SI,[BX]
如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
·对指定范围内的存储单元进行反汇编,格式为:
-U[range]
例如:
-u100 10c
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
或
-u100 112
18E4:0100 C70604023801 MOV WORD PTR[0204],0138
18E4:0106 C70606020002 MOV WORD PTR[0206],0200
18E4:010C C70606020202 MOV WORD PTR[0208],0202
可见这两种格式是等效的。
8)命名命令N(Name),其格式为:
-N filespecs [filespecs]
命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:
[d:][path] filename[.ext]
例如,
-N myprog
-L
-
可把文件myprog装入存储器。
9)装入命令(Load),有两种功能。
·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:
-L[address[drive sector sector]
·装入指定文件,其格式为:
-L[address]
此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。
10)写命令W(Write),有两种功能。
·把数据写入磁盘的指定扇区。其格式为:
-W address drive sector sector
·把数据写入指定的文件中。其格式为:
-W[address]
此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。
11)退出DEBUG命令Q(Quit),其格式为:
-Q
它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。