📄 e路阳光 - 编程专区 - debug命令详解 天天好心情!.htm
字号:
参数的值,随后的 e
命令将使用列表中的值替换现有的字节值。如果发生错误,将不更改任何字节值。<BR>List
值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。<BR>范例<BR>假定键入以下命令:<BR>ecs:100<BR>Debug
按下面的格式显示第一个字节的内容:<BR>04BA:0100 EB.<BR>要将该值更改为
41,请在插入点键入 41,如下所示:<BR>04BA:0100 EB.41_<BR>可以用一个 e
命令键入连续的字节值。在键入新值后按 SPACEBAR(空格键),而不是按 ENTER 键。Debug
显示下一个值。在此范例中,如果按三次 SPACEBAR(空格键),Debug
将显示下面的值:<BR>04BA:0100 EB.41 10. 00. BC._<BR>要将十六进制值 BC
更改为 42,请在插入点键入 42,如下所示:<BR>04BA:0100 EB.41 10. 00.
BC.42_<BR>假定决定值 10 应该是 6F。要纠正该值,请按 HYPHEN 键两次以返回到地址
0101(值 10)。Debug 显示以下内容:<BR>04BA:0100 EB.41 10. 00.
BC.42-<BR>04BA:0102 00.-<BR>04BA:0101 10._<BR>在插入点键入
6f 更改值,如下所示:<BR>04BA:0101 10.6f_<BR>按 ENTER 停止 e
命令并返回到 Debug 提示符下。<BR>以下是字符串项的范例:<BR>eds:100 "This is
the text example"<BR>该字符串将从 DS:100 开始填充 24
个字节<BR>Debug:F(填充)<BR>使用指定的值填充指定内存区域中的地址。<BR>可以指定十六进制或
ASCII 格式表示的数据。任何以前存储在指定位置的数据将会丢失。<BR><BR>f range
list<BR><BR>参数<BR>range<BR>指定要填充内存区域的起始和结束地址,或起始地址和长度。关于有效的
range 值的信息,请单击“相关主题”列表中的“Debug
说明”。<BR>list<BR>指定要输入的数据。List
可以由十六进制数或引号包括起来的字符串组成。<BR><BR>说明<BR>使用 range 参数<BR>如果
range 包含的字节数比 list 中的数值大,Debug 将在 list 中反复指派值,直到 range
中的所有字节全部填充。<BR>如果在 range 中的任何内存损坏或不存在,Debug 将显示错误消息并停止
f 命令。<BR><BR>使用 list 参数<BR>如果 list 包含的数值多于 range
中的字节数,Debug 将忽略 list
中额外的值。<BR><BR>范例<BR>假定键入以下命令:<BR>f04ba:100l100 42 45
52 54 41<BR>作为响应,Debug 使用指定的值填充从 04BA:100 到 04BA:1FF
的内存位置。Debug 重复这五个值直到 100h
个字节全部填满为止。<BR><BR>Debug:G(转向)<BR><BR>运行当前在内存中的程序。<BR><BR>g
[=address]
[breakpoints]<BR><BR>参数<BR>=address<BR>指定当前在内存中要开始执行的程序地址。如果不指定
address,Windows 2000 将从 CS:IP
寄存器中的当前地址开始执行程序。<BR>breakpoints<BR>指定可以设置为 g 命令的部分的 1
到 10
个临时断点。<BR>有关执行循环、重复的字符串指令、软件中断或子程序的信息,请单击“相关主题”列表中的
Debug P(执行)。<BR>有关执行指令的信息,请单击“相关主题”列表中的 Debug
T(跟踪)。<BR>Debug:H(十六进制)<BR>对指定的两个参数执行十六进制运算。<BR><BR>h
value1 value2<BR><BR>参数<BR>value1<BR>代表从 0 到 FFFFh
范围内的任何十六进制数字。<BR>value2<BR>代表从 0 到 FFFFh
范围内第二个十六进制数字。<BR><BR>说明<BR>Debug
首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先计算和,然后计算差。<BR><BR>范例<BR>假定键入以下命令:<BR>h19f
10a<BR>Debug 执行运算并显示以下结果。<BR>02A9
0095<BR>Debug:I(输入)<BR><BR>从指定的端口读取并显示一个字节值。<BR>i
port<BR>参数<BR>port<BR>按地址指定输入端口。地址可以是 16
位的值。<BR>有关将字节值发送到输出端口的信息,请单击“相关主题”列表中的 Debug
O(输出)。<BR><BR>范例<BR>假定键入以下命令:<BR>i2f8<BR>同时假定端口的字节值是
42h。Debug
读取该字节,并将其值显示如下:<BR>42<BR><BR>Debug:L(加载)<BR>将某个文件或特定磁盘扇区的内容加载到内存。<BR>要从磁盘文件加载
BX:CX 寄存器中指定的字节数内容,请使用以下语法:<BR>l [address]<BR>要略过
Windows 2000 文件系统并直接加载特定的扇区,请使用以下语法:<BR>l address
drive start
number<BR><BR>参数<BR>address<BR>指定要在其中加载文件或扇区内容的内存位置。如果不指定
address,Debug 将使用 CS
寄存器中的当前地址。<BR>drive<BR>指定包含读取指定扇区的磁盘的驱动器。该值是数值型:0 = A,
1 = B, 2 = C
等。<BR>start<BR>指定要加载其内容的第一个扇区的十六进制数。<BR>number<BR>指定要加载其内容的连续扇区的十六进制数。只有要加载特定扇区的内容而不是加载
debug 命令行或最近的 Debug n(名称)命令中指定的文件时,才能使用 drive、start 和
number 参数。<BR>有关指定用于 l 命令的文件的信息,请单击“相关主题”列表中的 Debug
n(名称)。<BR>有关写入调试到磁盘的文件的信息,请单击“相关主题”列表中的 Debug
w(写入)。<BR><BR>注意<BR>使用不带参数的 l 命令<BR>当使用不带参数的 l 命令时,在
debug 命令行上指定的文件将加载到内存中,从地址 CS:100 开始。Debug 同时将 BX 和 CX
寄存器设置为加载的字节数。如果不在 debug 命令行指定文件,所装入的文件将是最近使用 n
命令经常指定的文件。<BR><BR>使用具有 address 参数的 1 命令<BR>如果使用带
address 参数的 l 命令,Debug 将从内存位置 address
开始加载文件或指定扇区的内容。<BR><BR>使用带全部参数的 l 命令<BR>如果使用带所有参数的 l
命令,Debug
将加载指定磁盘扇区的内容而不是加载文件。<BR><BR>加载特定扇区的内容<BR>指定范围内的每个扇区均从
drive 读取。Debug 从 start 开始加载,直到在 number
中指定的扇区数中的内容全部被加载。<BR><BR>加载 .exe 文件<BR>Debug 忽略 .exe
文件的地址 address 参数。如果指定 .exe 文件,Debug 将文件重新定位到 .exe
文件的标题中指定的加载地址。在 .exe 文件被加载到内存前,标题自身从 .exe 文件脱离,因此磁盘上的
.exe 文件大小与内存中的不同。如果要检查整个 .exe
文件,请使用不同的扩展名重命名文件。<BR><BR>打开十六进制文件<BR>Debug 将具有 .hex
扩展名的文件认为十六进制格式文件。键入不带参数的 l
命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。如果键入的 l 命令包含 address
参数,Debug
将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。<BR><BR>范例<BR>假定启动
Debug 并键入以下命令:<BR>nfile.com<BR>现在可以键入 l 命令以加载
File.com。Debug 将加载文件并显示 Debug 提示符。<BR>假定需要从驱动器 C
将起始逻辑扇区为 15 (0Fh) 的 109 (6Dh) 个扇区的内容加载到起始地址为 04BA:0100
的内存中。为此,请键入以下命令:<BR>l04ba:100 2 0f
6d<BR><BR>Debug:M(移动)<BR><BR>将一个内存块中的内容复制到另一个内存块中。<BR>m
range
address<BR><BR>参数<BR>range<BR>指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。<BR>address<BR>指定要将
range
内容复制到该位置的起始地址。<BR>说明<BR>复制操作对现有数据的影响<BR>如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。)<BR><BR>执行覆盖复制操作<BR>m
命令执行目标地址的覆盖复制操作,而不丢失数据。将改写的地址内容首先复制。因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。<BR><BR>范例<BR>假定键入以下命令:<BR>mcs:100
110 cs:500<BR>Debug 首先将 CS:110 地址中的内容复制到地址 CS:510
中,然后将 CS:10F 地址中的内容复制到 CS:50F 中,如此操作直至将 CS:100
地址中的内容复制到地址 CS:500 中。要查看结果,请使用 Debug d(转储)命令,并使用 m
命令指定目标地址<BR>Debug:N(名称)<BR><BR>指定 Debug l(加载)或
w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。<BR><BR>n
[drive:][path]
filename<BR><BR>要指定测试的可执行文件的参数,请使用以下语法:<BR>n
file-parameters<BR><BR>参数<BR>如果在没有参数的情况下使用,则 n
命令清除当前规范。<BR>[drive:][path]
filename<BR>指定要测试的可执行文件的位置和名称。<BR>file-parameters<BR>为正在测试的可执行文件指定参数和开关。<BR>有关将文件或指定磁盘扇区的内容加载到内存中的信息,请单击“相关主题”列表中的
Debug L(加载)。<BR>有关写入调试到磁盘的文件的信息,请单击“相关主题”列表中的 Debug
W(写入)。<BR><BR>说明<BR>n 命令的两个用途<BR>可以按两种方式使用 n
命令。首先,您可以使用它以指定后面的 l(加载)或
w(写入)命令所使用的文件。如果在没有命名所调试文件的情况下启动 Debug,必须在使用 l
命令加载文件之前使用命令 nfilename。在 CS:5C 为文件控制块 (FCB)
正确编排文件名的格式。其次,可以使用 n
命令指定被调试文件的命令行参数和开关。<BR><BR>内存区域<BR>以下四个内存区域都会受到 n
命令的影响:<BR>内存位置<BR>内容<BR>CS:5C<BR>文件 1 的文件控制数据块
(FCB)<BR>CS:6C<BR>文件 2 的文件控制数据块 (FCB)<BR>CS:80<BR>n
命令行的长度(以字符表示)<BR>CS:81<BR>n 命令行字符的开头<BR><BR>为 n
命令指定的第一个文件名被放在 CS:5C 的 FCB 中。如果指定第二个文件名,此名称将放置到 CS:6C
的 FCB 中。n 命令行上键入的字符数(除第一个字符之外,n)存储在位置 CS:80。n
命令行上的实际字符(再次,除了字母 n 之外)存储在以 CS:81 开头的位置。注意这些字符可以是在
Windows 2000
命令提示符下键入的命令中有效的任何开关和分隔符。<BR><BR>范例<BR>假定已经启动
Debug,并加载了正在调试的程序 Prog.com。接着您决定为 Prog.com
指定两个参数并运行此程序。以下是此范例的命令序列:<BR>debug prog.com<BR>nparam1
param2<BR>g<BR>在这种情况下,Debug g(转向)命令会运行该程序,就好像您已在
Windows 2000 命令提示符后键入了如下命令:<BR>prog param1
param2<BR>所以,测试和调试反映 Prog.com
通常的运行时间环境。<BR>在下面的命令序列中,第一个 n 命令将 File1.exe 指定为后接的
l(加载)命令的文件,该命令将 File1.exe 加载到内存。第二个 n 命令指定 File1.exe
将使用的参数。最后,g 命令将运行 File1.exe 文件,就好像您在 Windows 2000
命令行中键入了 File1 File2.dat File2.dat
一样。<BR>nfile1.exe<BR>l<BR>nfile2.dat
file3.dat<BR>g<BR>注意<BR>不要在 n 命令的第二种形式后使用 l
命令。还要注意,如果现在使用 w(写入)命令,Windows 2000 将使用名称 File2.dat
保存正在调试的文件 File1.exe。为避免出现此结果,应该总是在 l 或 w 命令之前立即使用 n
命令的第一种形式。<BR>Debug:O(输出)<BR><BR>将字节值发送到输出端口。<BR><BR>o
port
byte-value<BR><BR>参数<BR>port<BR>通过地址指定输出端口。端口地址可以是 16
位值。<BR>byte-value<BR>指定要指向 port
的字节值。<BR>有关从输入端口读取字节值的信息,请单击“相关主题”列表中的 Debug
I(输入)。<BR>范例<BR>要将字节值 4Fh 发送到地址为 2F8h
的输出端口,请键入以下命令:<BR>o2f8
4f<BR>Debug:P(执行)<BR><BR>执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。<BR><BR>p
[= address]
[number]<BR><BR>参数<BR>=address<BR>指定第一个要执行指令的位置。如果不指定地址,则默认地址是在
CS:IP 寄存器中指定的当前地址。<BR>number<BR>指定在将控制返回给 Debug
之前要执行的指令数。默认值为 1。<BR>有关运行当前在内存中程序的信息,请单击“相关主题”列表中的
Debug G(转向)。<BR>有关执行指令的信息,请单击“相关主题”列表中的 Debug
T(跟踪)。<BR><BR>说明<BR>控制传送到要测试的程序<BR>当 p 命令将控制从 Debug
传送到要测试的程序时,该程序不间断运行,直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止,或者直到执行了指定数量的机器指令为止。控制返回到
Debug。<BR>地址参数的限制<BR>如果 address 参数没有指定段,Debug
将使用被测试程序的 CS 寄存器。如果省略 address,程序将从 CS:IP
寄存器所指定的地址开始执行。必须在 address 参数之前使用等号 (=) 以便将它与 number
参数区分。如果在指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则 p 命令与 Debug
t(跟踪)命令的作用相同。<BR>使用 p 命令显示的邮件<BR>当 p 执行完一段说明后,Debug
显示出程序的寄存器内容、标志的状态以及下一段将要被执行的指令的解码形式。<BR><BR>警告<BR>不能使用
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -