本文主要介绍DEBUG命令的详细解释,有需要的朋友可以参考一下。
开始调试
1.打开Windows命令窗口。
在Windows 95/98环境下,打开命令窗口的步骤是:点击开始运行,输入命令;在WindowsXP和WIN7的环境下,打开命令窗口的步骤是:点击开始运行,输入cmd命令;
2.开始调试
在命令窗口中启动调试。启动命令一般是:DEBUG[文件名][参数表]。其中:文件名指定被调试文件,包括名称和后缀,参数表是被调试文件运行所需的参数。被调试的文件可以是系统中的任何文件,但通常它们的后缀是。EXE或。COM。当调试成功开始时,将显示连接器“-”,此时,您可以输入各种调试命令。DEBUG中的所有命令及其含义都显示在DEBUG中每个命令的功能指令表中。使用该命令的注意事项:只能在提示符“-”下输入命令,按“enter”键后命令才会被执行。命令是单个字母,命令和参数的大小写可以混合。您可以使用F1、F2、F3、Ins、Del、left shift键、right shift键等编辑键来编辑该行中的命令。当命令中有语法错误时,将在错误位置显示“错误”。Ctrl C或Ctrl Break可用于终止当前命令的执行,或者Ctrl S或Ctrl Num Lock可用于暂停屏幕显示(当连续显示信息时)
这里有19个例子,让你熟悉DEBUG的命令集和基本汇编指令。
Debug:A(汇编)
将8086/8087/8088存储器代码直接合并到存储器中。
这个命令从汇编语言语句中创建可执行的机器代码。所有数值都是十六进制格式,并且必须输入一到四个字符。在引用的操作码(操作码)前指定前缀内存代码。
地址
参数
地址
指定汇编语言指令的位置。使用十六进制值作为地址,并键入不以“h”字符结尾的每个值。如果不指定地址,A将从上次停止的地方开始编译。
有关将数据输入指定字节的信息,请参见调试E。
有关反汇编字节的信息,请参见Debug U(反汇编)。
说明
使用内存代码
段的备用存储器代码为cs:ds:es:和ss:远程返回的内存代码为retf。字符串处理的助记码必须明确说明字符串的大小。比如movsw可以移动16位字符串,movsb可以移动8位字节字符串。
汇编跳转和调用
汇编器根据字节替换自动汇编短、近、远跳转并调用到目标地址。您可以使用near或far前缀来替换这样的跳转或调用,如下例所示:
-a0100:0500
0100:0500 jmp 502;一个2字节的短跳转
0100:0502 505附近jmp一个3字节的近跳转
0100:0505 jmp far 50a;5字节的远跳转
您可以将near前缀缩写为ne。
区分字和字节存储位置
当操作数可以引用字内存位置或字节内存位置时,必须用前缀字ptr或字节ptr指定数据类型。可接受的缩写分别是wo和by。以下示例显示了两种格式:
dec wo [si]
负字节指针[128]
指定操作数
Debug通过使用方括号([])中的操作数来引用内存地址的习语。另一方面,这是因为Debug无法区分立即操作数和内存地址的操作数。以下示例显示了两种格式:
mov ax,21;用21h加载AX
mov ax,[21];用加载AX
;的内容
;存储位置21h
使用伪指令
使用命令A提供两个常用的伪指令:db opcode,直接将字节值组装到内存中,dw opcode,直接将字值组装到内存中。下面是伪指令的两个例子:
db 1,2,3,4,“这是一个例子”
“db”这是一个引号:“”
“db”这是一个引号:“”
dw 1000,2000,3000,巴赫
模型
命令支持所有形式的间接注册命令,如下例所示:
添加bx,34[bp 2]。[si-1]
英国石油公司
推[si])
还支持所有操作码同义词,如下例所示:
loopz 100
loope 100
ja 200
jnbe 200
对于8087操作码,必须指定wait或fwait前缀,如下例所示:
fwait fadd st,ST(3);这条生产线组装
;fwait前缀
Debug:C(比较)
比较记忆的两个部分。
c范围地址
参数
范围
指定要比较的第一个内存区域的起始和结束地址,或者起始地址和长度。
地址
指定要比较的第二个内存区域的起始地址。有关有效地址值的信息,请参考调试说明。
解释
如果范围和地址内存区域相同,调试将不显示任何内容,并将直接返回到调试提示符。如果存在差异,调试将以以下格式显示:
地址1字节1字节2地址2
模型
以下命令具有相同的效果:
c100,10f 300
c100l10 300
每个命令将100h至10Fh的存储器数据块与300h至30Fh的存储器数据块进行比较。
响应前面的调试命令,并显示以下信息(假设DS=197F):
E4 4D
197F:0101 67 99 197F:0301
197F:0102 A3 27 197F:0302
197F:0103 35 F3 197F:0303
197F:0104 97 BD 197F:0304
197F:0105 04 35 197F:0305
197F:0107 76 71 197F:0307
197F:0108 E6 11 197F:0308
197F:0109 19 2C 197F:0309
197 f:010 a 80 a 197 f:030 a
197F:010B 36 7F
197F:010C BE 22
197F:010D 83 93 197F:030D
197F:010E 49 77
197F:010F 4F 8A 197F:030F
请注意,列表中缺少地址197F:0106和197F:0306。这表明这些地址中的值是相同的。
Debug:D(转储)
显示一系列内存地址的内容。
范围
参数
范围
指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。如果未指定range,调试程序将显示从上一个d命令中指定的地址范围末尾开始的128个字节。
有关显示寄存器内容的信息,请参见Debug R(寄存器)。
解释
使用d命令时,Debug将内存内容显示为两部分:十六进制部分(每个字节的值用十六进制格式表示)和ASCII部分(每个字节的值用ASCII字符表示)。每个非打印字符由句点(.)在显示的ASCII部分。每个显示行显示16个字节的内容,在第8个字节和第9个字节之间有一个连字符。每一行显示从16字节的边界开始。
模型
假设您键入以下命令:
DCS:100 10层
调试以下列格式显示作用域的内容:
4D 00 53 41 57 59-45 52 00 00 00 00 00 00 00 00 00汤姆。锯木匠.
如果键入不带参数的d命令,Debug会按照上一个示例中的描述格式化显示。每行显示以比前一行地址大16字节的地址开始(如果是显示40列的屏幕,则为8字节)。
对于以后键入的每个不带参数的d命令,Debug将在最后显示的命令后立即显示字节内容。
如果您键入以下命令,调试将显示CS:100中20h字节的内容:
dcs:100 l 20
如果您键入以下命令,Debug将显示CS段中从100h到115h的所有字节的内容:
dcs:100 115
Debug:E(键入)
将数据输入内存中的指定地址。
您可以用十六进制或ASCII格式键入数据。先前存储在指定位置的所有数据都将丢失。
e地址[列表]
参数
地址
指定输入数据的第一个内存位置。
目录
指定要输入连续内存字节的数据。
有关集成内存代码的信息,请参见调试A(汇编)。
有关显示内存部分内容的信息,请参见Debug D (dump)。
解释
使用地址参数
如果指定了address的值而没有指定可选list参数的值,Debug将显示地址和内容,在下一行重复该地址,并等待您的输入。此时,您可以执行以下操作之一:
替换字节值。为此,请在当前值后键入一个新值。如果您键入的值不是有效的十六进制值,或者该值包含两个以上的数字,调试将不会回显无效或多余的字符。
转到下一个字节。为此,请按空格键。要更改此字节中的值,请在当前值后键入一个新值。如果按空格键时移动超过了8位限制,调试程序将显示新的一行,并在该行的开头显示新的地址。
返回到前一个字节。为此,请按连字符键(-)。您可以重复按下连字符键(-)来向后移动几个字节。当您按下连字符时,调试开始一个新行,并显示当前地址和字节值。
停止执行e命令。为此,请按ENTER键。您可以在任何字节位置按ENTER键。
使用list参数
如果指定list参数的值,后续的e命令将用列表中的值替换现有的字节值。如果发生错误,字节值不会改变。
列表值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。该字符串必须用单引号或双引号括起来。
模型
假设您键入以下命令:
ecs:100
Debug以下列格式显示第一个字节的内容:
04BA:0100 EB。
要将值更改为41,请在插入点键入41,如下所示:
04BA:0100 EB.41_
您可以使用e命令键入连续的字节值。键入新值后,按空格键而不是ENTER。调试显示下一个值。在此示例中,如果您按空格键三次,调试将显示以下值:
公元前41 10年。00.公元前。_
要将十六进制值BC更改为42,请在插入点键入42,如下所示:
公元前41 10年。00.公元前42年
假设判决值10应该是6F。要更正该值,请按两次连字符键返回到地址0101(值10)。调试显示以下内容:
公元前41 10年。00.公元前42年-
04BA:0102 00。-
04BA:0101 10。_
在插入点键入6f以更改该值,如下所示:
04BA:0101 10.6f_
按ENTER键停止e命令并返回到调试提示符。
以下是字符串项的示例:
eds:100“这是文本示例”
这个字符串将由从DS:100开始的24个字节填充。
Debug:F(填充)
用指定的值填充指定内存区域中的地址。
您可以指定十六进制或ASCII格式的数据。先前存储在指定位置的所有数据都将丢失。
f系列列表
参数
范围
指定要填充的存储区的起始和结束地址,或者起始地址和长度。有关有效范围值的信息,请参考“调试说明”。
目录
指定要输入的数据。列表可以由用引号括起来的十六进制数字或字符串组成。
解释
使用范围参数
如果该范围包含的字节数多于列表中的值,Debug将重复分配列表中的值,直到该范围中的所有字节都被填满。
如果范围内的任何内存损坏或不存在,Debug将显示一条错误消息并停止f命令。
使用list参数
如果列表包含的值多于范围内的字节数,调试将忽略列表中多余的值。
模型
假设您键入以下命令:
f04ba:100l100 42 45 52 54 41
作为响应,Debug用指定的值填充从04BA:100到04BA:1FF的内存位置。重复这五个值,直到填满所有100h字节。
Debug:G(转向)
当前在内存中运行的程序。
g[=地址][断点]
参数
=地址
指定程序当前在内存中开始执行的地址。如果没有指定地址,Windows 2000将从CS:IP寄存器中的当前地址开始执行程序。
断点
指定1到10个临时断点,这些断点可以设置为g命令的一部分。
有关执行循环、重复字符串指令、软件中断或子例程的信息,请参见Debug P。
有关执行指令的信息,请参见调试测试。
Debug:H(十六进制)
对指定的两个参数执行十六进制运算。
h值1值2
参数
价值1
表示从0到FFFFh范围内的任何十六进制数。
价值2
表示从0到FFFFh范围内的第二个十六进制数。
解释
调试首先将两个指定的参数相加,然后从第一个参数中减去第二个参数。这些计算的结果显示在一行中:先算和,再算差。
模型
假设您键入以下命令:
h19f 10a
执行调试操作并显示以下结果。
02A9 0095
Debug:I(输入)
从指定端口读取并显示一个字节值。
I端口
参数
港口
通过地址指定输入端口。该地址可以是16位值。
有关向输出端口发送字节值的信息,请参见调试O(输出)。
模型
假设您键入以下命令:
i2f8
同时,假设端口的字节值为42h。读取调试该字节并显示其值,如下所示:
四十二个
Debug:L(加载)
将文件或特定磁盘扇区的内容装入内存。
要从磁盘文件加载BX:CX寄存器中指定的字节内容,请使用以下语法:
l[地址]
要跳过Windows 2000文件系统并直接加载特定扇区,请使用以下语法:
l地址驱动开始编号
参数
地址
指定要加载文件或扇区内容的内存位置。如果未指定地址,调试将使用CS寄存器中的当前地址。
驱动器
指定包含读取指定扇区的磁盘的驱动器。该值是数字:0=A,1=B,2=C,等等。
开始
指定要加载其内容的第一个扇区的十六进制数。
数字
指定要加载其内容的连续扇区的十六进制数。当您想要加载特定扇区的内容,而不是在debug命令行或最新的Debug n (name)命令中指定的文件时,您只能使用drive、start和number参数。
有关指定用于l命令的文件的信息,请参见Debug n (name)。
有关将调试文件写入磁盘的信息,请参见Debug w (write)。
注意
使用不带参数的l命令。
使用不带参数的L命令时,debug命令行上指定的文件将从地址CS:100开始加载到内存中。调试将BX和CX寄存器设置为加载的字节数。如果您没有在调试命令行上指定文件,那么加载的文件将是最近使用n命令频繁指定的文件。
使用带有地址参数的1命令。
如果使用带有address参数的l命令,Debug将从内存位置地址加载文件或指定扇区的内容。
使用带所有参数的l命令。
如果使用带所有参数的l命令,调试将加载指定磁盘扇区的内容,而不是加载文件。
装入特定扇区的内容。
从驱动器中读取指定范围内的每个扇区。从调试开始加载,直到number中指定的扇区数量中的所有内容都已加载。
加载。exe文件
忽略调试文件的地址参数。如果指定了。exe文件时,Debug会将该文件重定位到。exe文件。在……exe文件加载到内存中时,标题本身会从。exe文件,因此。exe文件与内存中的不同。如果您想检查整个。请使用不同的扩展名重命名该文件。
打开十六进制文件
Debug用。十六进制格式文件的十六进制扩展名。键入不带参数的l命令,从十六进制文件中指定的地址加载十六进制文件。如果键入的L命令包含address参数,Debug会将指定的地址添加到十六进制文件中找到的地址,以确定起始地址。
模型
假设您启动调试并键入以下命令:
nfile.com
现在,您可以键入l命令来加载File.com。调试将加载文件并显示调试提示。
假设起始逻辑扇区为15 (0Fh)的109 (6Dh)个扇区的内容需要从驱动器C加载到起始地址为04BA:0100的存储器中。为此,请键入以下命令:
l04ba:100 2 0f 6d
Debug:M(移动)
将一个内存块的内容复制到另一个内存块。
m范围地址
参数
范围
指定要复制内容的内存区域的起始和结束地址,或者起始地址和长度。
地址
指定将范围内容复制到此位置的起始地址。
解释
复制对现有数据的影响
如果新数据没有写入正在复制的数据块中的地址,源数据将保持不变。但是,如果目标块已经包含数据(就像在覆盖拷贝操作中一样),数据将被覆盖。(覆盖复制操作是指目标数据块的部分内容覆盖原数据块的部分内容的操作。)
执行覆盖复制操作
m命令执行目标地址的覆盖复制操作,而不会丢失数据。首先复制重写的地址内容。因此,如果较高位地址的数据被复制到较低位地址,复制操作从原始块的最低位地址开始并进行到最高位地址。相反,如果您想将数据从低位地址复制到高位地址,复制操作将从原始块的最高地址开始,然后进行到最低地址。
模型
假设您键入以下命令:
mcs:100 110 cs:500
Debug首先将CS:110地址的内容复制到CS:510地址,然后将CS:10F地址的内容复制到CS:50F地址,依此类推,直到将CS:100地址的内容复制到CS:500地址。要查看结果,请使用Debug d (dump)命令并使用m命令指定目标地址。
Debug:N(名称)
指定Debug l (load)或W (write)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。
n[驱动器:][路径]文件名
要指定测试的可执行文件的参数,请使用以下语法:
文件参数
参数
如果不带参数使用,n命令将清除当前规范。
[驱动器:][路径]文件名
指定要测试的可执行文件的位置和名称。
文件参数
为正在测试的可执行文件指定参数和开关。
有关将文件或指定磁盘扇区的内容加载到内存中的信息,请参见Debug L。
有关将调试文件写入磁盘的信息,请参见Debug W (write)。
解释
命令n的两种用法
n命令有两种用法。首先,您可以使用它来指定后续L (load)或W (write)命令要使用的文件。如果启动调试时没有命名被调试的文件,则必须在使用l命令加载文件之前使用nfilename命令。为CS:5C中的文件控制块(FCB)正确格式化文件名。其次,可以使用n命令指定被调试文件的命令行参数和开关。
存储区
以下四个内存区域都受n命令的影响:
磁心位置
内容
政务司司长:5C
文件1的文件控制数据块(FCB)
政务司司长:6C
文件2的文件控制数据块(FCB)
政务司司长:80
命令行长度n(以字符为单位)
政务司司长:81
n命令行字符的开头
为n命令指定的第一个文件名放在CS:5C的FCB中。如果您指定第二个文件名,该名称将被放置在CS:6C的FCB中。在命令行上输入的字符数(除了第一个字符n)存储在位置CS:80。命令行n上的实际字符(同样,除了字母n)存储在以CS:81开始的位置。请注意,这些字符可以是在Windows 2000命令提示符下键入的命令中有效的任何开关和分隔符。
模型
假设调试已经开始,正在调试的程序program已经加载。然后,您决定为program指定两个参数并运行这个程序。以下是该示例的命令序列:
调试prog.com
nparam1参数2
g
在这种情况下,Debug g (turn)命令将运行该程序,就像您在Windows 2000命令提示符下键入了以下命令一样:
程序参数1参数2
因此,测试和调试反映了Prog.com通常的运行时环境。
在以下命令序列中,第一个N命令将File1.exe指定为后续L (load)命令的文件,该命令将File1.exe加载到内存中。第二个n命令指定File1.exe将使用的参数。最后,g命令将运行File1.exe文件,就像您在Windows 2000命令行中键入File1 File2.dat File2.dat一样。
nfile1.exe
l
nfile2.dat文件3.dat
g
注意
不要在n命令的第二种形式后使用l命令。还要注意,如果您现在使用w (write)命令,Windows 2000将把正在调试的文件File2.dat保存为File2.dat。为了避免这种结果,应该总是在l或w命令之前立即使用n命令的第一种形式。
Debug:O(输出)
将字节值发送到输出端口。
o端口字节值
参数
港口
通过地址指定输出端口。端口地址可以是16位值。
字节值
指定指向端口的字节值。
有关从输入端口读取字节值的信息,请参见调试I(输入)。
模型
要将字节值4Fh发送到地址为2F8h的输出端口,请键入以下命令:
o2f8 4f
Debug:P(执行)
执行循环、重复的字符串指令、软件中断或子程序;或者通过任何其他指令。
地址[号码]
参数
=地址
指定要执行的第一条指令的位置。如果没有指定地址,默认地址是CS:IP寄存器中指定的当前地址。
数字
指定在将控制返回调试之前要执行的指令数。默认值为1。
有关运行当前内存中的程序的信息,请参见Debug G。
有关执行指令的信息,请参见Debug T (trace)。
解释
控制被转移到要测试的程序。
当p命令将控制从调试转移到要测试的程序时,程序连续运行,直到指定地址的循环、重复的字符串指令、软件中断或子程序完成,或者直到执行了指定数量的机器指令。控制返回到调试。
地址参数的限制
如果地址参数没有指定段,调试将使用被测程序的CS寄存器。如果省略address,程序将从CS:IP寄存器中指定的地址执行。必须在address参数前使用等号(=),以区别于number参数。如果指定地址处的指令不是循环、重复的字符串指令、软件中断或子例程,则p命令与Debug t (trace)命令具有相同的功能。
使用 p 命令显示的邮件
p执行完一段指令后,Debug显示程序的寄存器内容,标志的状态,以及下一段要执行的指令的解码形式。
警告
不能用p命令跟踪只读存储器(ROM)。
模型
假设被测程序在地址CS:143F包含一个调用指令。要运行调用目标的子例程,然后将控制返回到调试,请键入以下命令:
p=143f
调试以下列格式显示结果:
AX=0000 BX=0000 CX=0000 DX=0000 FFEE BP=0000 SI=0000 DI=0000
DS=2246 ES=2246 SS=2246 CS=2246 IP=1443 NV UP EI PL NZ AC PO NC
2246:1442 7505 JNZ 144A
Debug:Q(退出)
停止调试会话,不保存当前测试的文件。
当您键入Q时,控制返回到Windows 2000的命令提示符。
q
参数
该命令不带参数。
有关保存文件的信息,请参见Debug W (write)。
Debug:R(寄存器)
或者改变一个或多个CPU寄存器的内容。
注册名称
参数
没有
如果不带参数使用,r命令显示所有寄存器的内容和寄存器存储区中的标志。
注册名称
指定要显示其内容的寄存器的名称。
有关显示内存部分内容的信息,请参见Debug D (dump)。
有关反汇编字节的信息,请参见Debug U(反汇编)。
解释
使用r命令
如果指定了一个注册名,Windows 2000将以十六进制表示法显示该注册的16位值,并显示一个冒号作为提示。如果你想改变寄存器中包含的值,除非你键入一个新值并按回车键;否则,按ENTER键返回调试提示符。
有效的寄存器名称
以下是register-name的有效值:ax、bx、cx、dx、sp、bp、si、di、ds、es、ss、cs、ip、pc和F.而ip和pc都是指指令指针。
如果您指定注册表名称而不是以前列表中的名称,Windows 2000将显示以下消息:
br错误
使用f字符代替注册名。
如果键入F字符而不是寄存器名称,调试会将每个标志的当前设置显示为两个字母的代码,然后显示调试提示。要更改徽标的设置,请从下表中键入适当的两个字母的代码:
徽标名称
建立
收拾餐桌
溢出
观测速度(observed velocity)
女
方向
Dn(减号)
向上(增加)
暂停
Ei(已启用)
Di(禁用)
左右
Ng(阴性)
Pl(正)
零
zr
新西兰
辅助进位
交流电
钠
奇偶校验检查
Pe(偶数校验)
奇数奇偶校验
携带
日历年度(calendar year)
(美国)北卡罗来纳州
您可以按任何顺序键入新的标志值。这些值之间不需要留空格。要停止r命令,请按ENTER键。任何未指定新值的标志都保持不变。
用r命令显示的邮件
如果为标记指定了多个值,调试将显示以下消息:
测向误差
如果您指定了上表中未列出的标志代码,调试将显示以下消息:
bf误差
在这两种情况下,调试都将忽略无效项目后指定的所有设置。
调试的默认设置
当调试开始时,段寄存器将被设置为空闲内存的低端,指令指针将被设置为0100h,所有标志将被清除,其他寄存器将被设置为零,除了sp被设置为FFEEh。
调试:R
模型
要查看所有寄存器的内容、所有标志的状态以及当前位置的指令解码表,请键入以下命令:
r
如果当前位置是CS:11A,显示外观将类似于以下内容:
AX=0e 00 BX=00FF CX=0007 DX=01FF SP=039d BP=0000 SI=005 c DI=0000
DS=04BA ES=04BA SS=04BA CS=04BA IP=011 a NV UP ding NZ AC PE NC
04BA:011A CD21 INT 21
要仅查看标志的状态,请键入以下命令:
无线电频率
调试以下列格式显示信息:
新西兰AC PE NC - _
现在,您可以按任意顺序键入一个或多个有效的标志值,包括空格或不包括空格,如下所示:
新西兰交流政策
结束Debug r命令并显示调试提示符。要查看更改,请键入r或rf命令。调试将显示以下内容:
NV UP EI PL NZ AC PE cycle-_
按ENTER键返回调试提示符。
Debug:S(搜索)
在地址范围内搜索一个或多个字节值的模式。
s范围列表
参数
范围
指定搜索范围的开始和结束地址。
目录
指定一个或多个字节值的模式,或要搜索的字符串。用空格或逗号将每个字节值与下一个字节值分隔开。在引号中包含字符串值。
解释
如果list参数包含多个字节值,Debug将只显示该字节值出现的第一个地址。如果列表只包含一个字节值,Debug将显示该值出现的指定范围内的所有地址。
模型
假设您需要查找包含值41并且范围从CS:100到CS:110的所有地址。为此,请键入以下命令:
《标准说明》:100 110 41
调试以下列格式显示结果:
04BA:0104
04BA:010D
-
以下命令在CS:100到CS:1A0的范围内搜索字符串“Ph”。
scs:100 1a0 Ph
Debug:T(跟踪)
(抱歉,调试:T部分暂时没有。如果哪位网友有这部分,请告诉我)
Debug:U(反汇编)
反汇编字节,显示相应的原始语句,包括地址和字节值。反汇编代码看起来像汇编文件的列表。
u[范围]
参数
没有
如果不带参数使用,u命令分解20h字节(默认值),从前一个u命令显示的地址之后的第一个地址开始。
范围
指定要反汇编代码的起始地址和结束地址,或者起始地址和长度。
有关集成内存代码的信息,请参见调试A(汇编)。
有关显示内存部分内容的信息,请参见Debug D (dump)。
范例
要从地址04BA:0100开始反汇编16 (10h)字节,请键入以下命令:
u04ba:100l10
调试以下列格式显示结果:
04BA:0100 206472和[SI 72],啊
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370和[BP DI 70],DH
04BA:0109 65 DB 65
04BA:010A 63 DB 63
04BA:010B 69 DB 69
04BA:010C 66 DB 66
04BA:010D 69 DB 69
04BA:010E 63 DB 63
04BA:010F 61 DB 61
如果仅显示从04BA:0100到04BA:0108的特定地址的信息,请键入以下命令:
u04ba:0100 0108
调试显示以下内容:
04BA:0100 206472和[SI 72],啊
04BA:0103 69 DB 69
04BA:0104 7665 JBE 016B
04BA:0106 207370和[BP DI 70],DH
Debug:W(写入)
将文件或特定分区写入磁盘。
要将BX:CX寄存器中指定字节数的内容写入磁盘文件,请使用以下语法:
w[地址]
要跳过Windows 2000文件系统并直接写入特定扇区,请使用以下语法:
w地址驱动器起始编号
参数
地址
指定要写入磁盘文件的文件或文件部分的起始内存地址。如果没有指定地址,调试程序将从CS:100开始。
驱动器
指定包含目标磁盘的驱动器。该值是数字:0=A,1=B,2=C,依此类推。
开始
指定要写入第一个扇区的十六进制数。
数字
指定要写入的扇区数量。
有关指定用于w命令的文件的信息,请参见Debug N (name)。
有关将文件或文件扇区内容加载到内存中的信息,请参见Debug L。
解释
启动Debug时或在最新的Debug n (name)命令中,必须指定磁盘文件的名称。这两种方法都可以正确格式化地址为CS:5C的文件控制块的文件名。
在使用不带参数的w命令之前,重置BX:CX
如果使用调试g(转向)、T(跟踪)、P(执行)或R(寄存器)命令,在使用无参数W命令之前,必须复位BX:CX寄存器。
将修改后的文件写入磁盘。
如果在不更改文件名、长度或起始地址的情况下修改文件,Debug仍然可以将文件正确写入源磁盘位置。
w命令的限制
你不能写。exe或。十六进制文件。
警告
因为Windows 2000文件句柄被跳过,所以写入特定分区是非常危险的。如果键入错误的值,磁盘文件结构将很容易损坏。
模型
假设你要把起始地址为CS:100的内存内容写到驱动器b的磁盘上,所需数据从磁盘的逻辑扇区号37h开始,持续2Bh个扇区。为此,请键入以下命令:
wcs:100 1 37 2b
写操作完成后,Debug会再次显示调试提示。
Debug:XA(分配扩展内存)
为扩展内存分配指定数量的页面。
要使用扩展内存,您必须安装符合Lotus/Intel/Microsoft扩展内存规范(LIM EMS)4.0版的扩展内存设备驱动程序。
xa[计数]
参数
数数
指定要分配的16KB页扩展内存的数量。
有关使用扩展内存的其他调试命令的信息,请参阅调试xd(释放扩展内存)、调试XM(映射扩展内存页面)或调试XS(显示扩展内存状态)。
解释
如果指定的页数可用,Debug将显示一条消息,指示所创建句柄的十六进制数;否则,调试将显示一条错误消息。
Debug:XA
模型
要分配8页扩展内存,请键入以下命令:
xa8
如果命令成功,调试将显示以下消息:
句柄已创建=0003
Debug:XD(释放扩展内存)
释放扩展内存的句柄。
要使用扩展内存,您必须安装符合Lotus/Intel/Microsoft扩展内存规范(LIM EMS)4.0版的扩展内存设备驱动程序。
xd[句柄]
参数
处理
指定要释放的句柄。
有关使用扩展内存的其他调试命令的信息,请参阅调试xa(分配扩展内存)、调试XM(映射扩展内存页面)或调试XS(显示扩展内存状态)。
模型
要释放句柄0003,请键入以下命令:
xd 0003
如果命令成功,调试将显示以下消息:
Hdle 0003已解除分配
Debug:XM(映射扩展内存页)
将属于指定句柄的扩展内存的逻辑页映射到扩展内存的物理页。
要使用扩展内存,您必须安装符合Lotus/Intel/Microsoft扩展内存规范(LIM EMS)4.0版的扩展内存设备驱动程序。
xm [lpage] [ppage] [handle]
参数
l页面
指定要映射到物理页面的扩展内存的逻辑页面号。
页面
指定l page映射到的物理页码。
处理
指定句柄。
有关使用扩展内存的其他调试命令的信息,请参阅调试xa(分配扩展内存)、调试XD(释放扩展内存)或调试XS(显示扩展内存)。
模型
要将句柄0003的逻辑页面5映射到物理页面2,请键入以下命令:
xm 5 2 0003
如果命令成功,调试将显示以下消息:
逻辑页面05映射到物理页面02
Debug:XS(显示扩展内存状态)
显示有关扩展内存状态的信息。
要使用扩展内存,您必须安装符合Lotus/Intel/Microsoft扩展内存规范(LIM EMS)4.0版的扩展内存设备驱动程序。
特小号
参数
该命令不带参数。
有关使用扩展内存的其他调试命令的信息,请参见Debug xa(分配扩展内存)、Debug XD(释放扩展内存)或Debug XM(映射扩展内存页)。
解释
调试显示的信息具有以下格式:
句柄xx分配了xx页
物理页面xx=帧段xx
总共xx个邮政特快专递页面中的xx个已被分配
总共xx个邮政特快专递句柄中的xx个已被分配
范例
要显示扩展内存信息,请键入以下命令:
特小号
调试显示与以下类似的信息:
句柄0000分配了0000页
句柄0001分配了0002页
物理页面00=帧段C000
物理页面01=帧段C400
物理页面02=帧段C800
物理页面03=帧段CC00
总共80页邮政特快专递页中的2页已经分配
总共分配了2个FF EMS句柄
到此这篇关于调试命令详解的文章就介绍到这了,更多相关调试命令详解内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!