Debug使用指南Word文档格式.docx

上传人:b****5 文档编号:20582694 上传时间:2023-01-24 格式:DOCX 页数:18 大小:28.17KB
下载 相关 举报
Debug使用指南Word文档格式.docx_第1页
第1页 / 共18页
Debug使用指南Word文档格式.docx_第2页
第2页 / 共18页
Debug使用指南Word文档格式.docx_第3页
第3页 / 共18页
Debug使用指南Word文档格式.docx_第4页
第4页 / 共18页
Debug使用指南Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Debug使用指南Word文档格式.docx

《Debug使用指南Word文档格式.docx》由会员分享,可在线阅读,更多相关《Debug使用指南Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

Debug使用指南Word文档格式.docx

在部分内存中搜索一个或多个字节值的模式。

执行一条指令,然后显示所有寄存器的内容、所有标志的状态和 

下一步要执

行的指令的解码形式。

反汇编字节并显示相应的原语句。

将被测试文件写入磁盘。

xa 

分配扩展内存。

xd 

释放扩展内存。

xm 

映射扩展内存页。

xs 

显示扩展内存的状态。

标志位的状态表示

=====================================================================分隔命令参数 

所有 

命令都接受参数,除了 

命令之外。

可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符。

因此,以下命令等价:

dcs:

100 

110 

cs:

d,cs:

100,110 

=====================================================================指定有效地址项 

Debug 

命令中的 

address 

参数指定内存位置。

Address 

是一个包含字母段记录的二位名称或一个四位字段地址加上一个偏移量。

可以忽略段寄存器或段地址。

a,g,l,t,u 

和 

命令的默认段是 

CS。

所有其他命令的默认段是 

DS。

所有数值均为十六进制格式。

有效地址如下:

在段名和偏移量之间要有冒号 

CS:

0100 

04BA:

======================================================================指定有效范围项 

range 

参数指定了内存的范围。

可以为 

选择两种格式:

起始地址和结束地址,或者起始地址和长度范围(由字母 

L表示)。

例如,下面的两个语法都可以指定从 

CS:

开始的 

16 

字节范围:

10f 

L10 

Debug子命令

Debug:

A(汇编) 

直接将 

记忆码合并到内存。

该命令从汇编语言语句创建可执行的机器码。

所有数值都是十六进制格式,必须按一到四个字符输入这些数值。

在引用的操作代码(操作码)前指定前缀记忆码。

[address] 

参数 

address 

指定键入汇编语言指令的位置。

对 

使用十六进制值,并键入不以“h”字符结尾的每个值。

如果不指定地址,a 

将在它上次停止处开始汇编。

范例 

add 

bx,34[bp+2].[si-1] 

pop 

[bp+di] 

push 

[si] 

 

还支持所有操作码同义词,如下例所示:

loopz 

loope 

ja 

200 

jnbe 

-a0100:

0500 

0100:

jmp 

502 

;

2-byte 

short 

jump 

0502 

near 

505 

3-byte 

0505 

far 

50a 

5-byte 

使用伪指令 

命令提供两个常用的伪指令:

db 

操作码,将字节值直接汇编到内存,

dw 

操作码,将字值直接汇编到内存。

以下是两个伪指令的范例:

1,2,3,4,"

THIS 

IS 

AN 

EXAMPLE"

QUOTATION 

MARK:

"

1000,2000,3000,"

BACH"

===================================================================

C(比较) 

range 

指定要比较的内存第一个区域的起始和结束地址,或起始地址和长度。

指定要比较的第二个内存区域的起始地址。

以下命令具有相同效果:

c100,107300 

c100L8 

300 

每个命令都对 

100h 

到 

10Fh 

的内存数据块与 

300h 

30Fh 

的内存数据块进行比较。

响应前面的命令并显示如下信息(假定 

DS 

197F):

197F:

4D 

E4 

197F:

0300 

0101 

67 

99 

0301 

0102 

A3 

27 

0302 

0103 

35 

F3 

0303 

0104 

97 

BD 

0304 

0105 

04 

0305 

0107 

76 

71 

0307 

注意:

列表中缺少地址 

0106 

0306。

这表明那些地址中的值是相同的。

如果 

内存区域相同,Debug 

将不显示任何内容而直接返回到 

提示符。

如果有差异,Debug 

将按如下格式显示:

address1byte1 

byte2 

addess2 

Debugd(转储) 

显示一定范围内存地址的内容。

[range] 

指定要显示其内容的内存区域的起始和结束地址,或起始地址和长度。

如果不指定 

range,Debug 

程序将从以前 

命令中所指定的地址范围的末尾开始显

示 

128 

个字节的内容。

范例 

10f 

按以下格式显示范围中的内容:

54 

4F 

00 

53 

41 

57 

59-45 

52 

TOM.SAWYER...... 

如果在没有参数的情况下键入 

命令,Debug 

按以前范例中所描述的内容来编排显示格式。

显示的每行以比前一行的地址大 

个字节(如果是显示 

40 

列的屏幕,则为 

个字节)的地址开头。

对于后面键入的每个不带参数的 

将紧接在最后显示的命令后立即显示字节内容。

dcs:

100 

20 

将从 

开始显示 

20h 

个字节的内容:

115 

将显示范围从 

CS 

段的 

115h 

中所有字节的内容:

当使用 

命令时,Debug 

以两个部分显示内存内容:

十六进制部分(每个字节的值都用十六进制格式表示)和 

ASCII 

码部分(每个字节的值都用 

码字符表示)。

每个非打印字符在显示的 

部分由句号 

(.) 

表示。

每个显示行显示 

字节的内容,第 

字节和第 

字节之间有一个连字符。

每个显示行从 

字节的边界上开始。

=====================================================================Debug:

E(键入) 

将数据输入到内存中指定的地址。

可以按十六进制或 

格式键入数据。

以前存储在指定位置的任何数据全部丢失。

指定输入数据的第一个内存位置。

list 

指定要输入到内存的连续字节中的数据。

ecs:

按下面的格式显示第一个字节的内容:

EB. 

要将该值更改为 

41,请在插入点键入 

41,如下所示:

EB.41_ 

可以用一个 

命令键入连续的字节值。

在键入新值后按 

SPACEBAR(空格键),而不是按 

ENTER 

键。

显示下一个值。

在此范例中,如果按三次 

SPACEBAR(空格键),Debug 

将显示下面的值:

EB.41 

10. 

00. 

BC._ 

要将十六进制值 

BC 

更改为 

42,请在插入点键入 

42,如下所示:

EB.41 

10. 

00. 

BC.42_ 

假定决定值 

10 

应该是 

6F。

要纠正该值,请按 

HYPHEN 

键(-)两次以返回到地址 

0101(值 

10)。

显示以下内容:

0100 

EB.41 

00. 

BC.42- 

00.- 

10._ 

在插入点键入 

6f 

更改值,如下所示:

10.6f_ 

按 

停止 

命令并返回到 

提示符下。

以下是字符串项的范例:

eds:

This 

is 

the 

text 

example"

该字符串将从 

DS:

开始填充 

24 

个字节。

如果在没有指定可选的 

参数的值情况下指定 

的值,Debug 

将显示地址和内容,在下一行重复地址,并等待您的输入。

此时,您可以执行下列操作之一:

替换字节值。

为此,请在当前值后键入新值。

如果您键入的值不是有效的十六进制值,或该值包含两个以上的数字,则 

不会回显无效或额外的字符。

进入下一个字节。

为此,请按 

SPACEBAR(空格键)。

要更改该字节中的值,请在当前值后键入新值。

如果按 

SPACEBAR(空格键)时,移动超过了 

位界限,Debug 

程序将显示新的一行并在行首显示新地址。

返回到前一个字节。

键 

可以反复按 

(-) 

向后移动超过多个字节。

在按 

时,Debug 

开始新行并显示当前地址和字节值。

停止执行 

命令。

在任何字节位置都可以按 

ENTER。

如果指定 

参数的值,随后的 

命令将使用列表中的值替换现有的字节值。

如果发生错误,将不更改任何字节值。

List 

值可以是十六进制字节或字符串。

使用空格、逗号或制表符来分隔值。

必须将字符串包括在单或双引号中。

F(填充) 

使用指定的值填充指定内存区域中的地址。

可以指定十六进制或 

格式表示的数据。

任何以前存储在指定位置的数据将会丢失。

range 

指定要填充内存区域的起始和结束地址,或起始地址和长度。

指定要输入的数据。

可以由十六进制数或引号包括起来的字符串组成。

f04ba:

100L100 

42 

45 

52 

54 

作为响应,Debug 

使用指定的值填充从 

04BA:

1FF 

的内存位置。

重复这五个值直到 

个字节全部填满为止。

如果 

包含的字节数比 

中的数值大,Debug 

将在 

中反复指派值,直到 

中的所有字节全部填充。

如果在 

中的任何内存损坏或不存在,Debug 

将显示错误消息并停止 

包含的数值多于 

中的字节数,Debug 

将忽略 

中额外的值。

G(转向) 

运行当前在内存中的程序。

[=address] 

[breakpoints] 

=address 

指定当前在内存中要开始执行的程序地址。

address,Windows 

2000 

IP 

寄存器中的当前地址开始执行程序。

breakpoints 

指定可以设置为 

命令的部分的 

个临时断点。

gcs:

7550 

Windows 

运行当前内存中的程序,直到执行到 

段中的断点地址 

为止。

将显示寄存器的内容和标志的状态并结束 

gcs:

7550, 

8000

命令设置两个断点:

遇到断点之后再次键入 

命令,将从在断点之后的指令开始执行,而不是在通常的开始地址执行。

必须在 

参数之前使用等号 

(=) 

以区分开始地址 

(address) 

和断点地址 

(breakpoints)。

程序在它遇到的第一个断点处停止,而不论您在 

breakpoint 

列表的什么位置键入断点。

在每个断点处用中断代码代替原始指令。

当程序到达断点时,Debug 

将所有断点地址恢复到它们的最初指令并显示所有寄存器的内容、所有标记的状态以及最后执行指令的解码形式。

显示的信息与使用 

r(寄存器)命令并指定断点时所显示的信息相同。

如果不在断点处停止程序,Debug 

程序将不使用原始指令替换中断代码。

可以只在包含 

8086 

操作代码(操作码)的第一个字节的地址上设置断点。

如果设置了 

个以上的断点,Debug 

将显示以下信息:

bp 

error 

H(十六进制) 

对指定的两个参数执行十六进制运算。

value1 

value2 

value1 

代表从 

FFFFh 

范围内的任何十六进制数字。

value2 

范围内第二个十六进制数字。

h19f 

10a 

执行运算并显示以下结果。

02A9 

0095 

首先将指定的两个参数相加,然后从第一个参数中减去第二个参数。

这些计算的结果显示在一行中:

先计算和,然后计算差。

I(输入) 

从指定的端口读取并显示一个字节值。

port 

按地址指定输入端口。

地址可以是 

位的值。

i2f8 

同时假定端口的字节值是 

42h。

读取该字节,并将其值显示如下:

42 

L(加载) 

将某个文件或特定磁盘扇区的内容加载到内存。

要从磁盘文件加载 

BX:

CX 

寄存器中指定的字节数内容,请使用以下语法:

[address] 

要略过 

Windows 

文件系统并直接加载特定的扇区,请使用以下语法:

drive 

start 

number 

指定要在其中加载文件或扇区内容的内存位置。

address,Debug 

将使用 

寄存器中的当前地址。

drive 

指定包含读取指定扇区的磁盘的驱动器。

该值是数值型:

A, 

B, 

等。

start 

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

指定要加载其内容的连续扇区的十六进制数。

只有要加载特定扇区的内容而不是加载 

debug 

命令行或最近的 

n(名称)命

令中指定的文件时,才能使用 

drive、start 

参数。

现在可以键入 

命令以加载 

F。

将加载文件并显示 

假定需要从驱动器 

将起始逻辑扇区为 

15 

(0Fh) 

的 

109 

(6Dh) 

个扇区的内容加载到起始地址为 

的内存中。

为此,请键入以下命令:

l04ba:

0f 

6d 

注意 

当使用不带参数的 

命令时,在 

命令行上指定的文件将加载到内存中,从地址 

开始。

同时将 

BX 

寄存器设置为加载的字节数。

如果不在 

命令行指定文件,所装入的文件将是最近使用 

命令经常指定的文件。

如果使用带 

参数的 

将从内存位置 

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

如果使用带所有参数的 

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

指定范围内的每个扇区均从 

读取。

从 

开始加载,直到在 

中指定的扇区数中的内容全部被加载。

加载 

.exe 

文件 

忽略 

文件的地址 

如果指定 

文件,Debug 

将文件重新定位到 

文件的标题中指定的加载地址。

在 

文件被加载到内存前,标题自身从 

文件脱离,因此磁盘上的 

文件大小与内存中的不同。

如果要检查整个 

文件,请使用不同的扩展名重命名文件。

打开十六进制文件 

将具有 

.hex 

扩展名的文件认为十六进制格式文件。

键入不带参数的 

命令,可以加载从十六进制文件中指定的地址处开始的十六进制文件。

如果键入的 

命令包含 

参数,Debug 

将把指定的地址加到在十六进制文件中找到的地址上,以确定起始地址。

======================================================================Debug:

M(移动) 

将一个内存块中的内容复制到另一个内存块中。

指定要复制内容的内存区域的起始和结束地址,或起始地址和长度。

指定要将 

内容复制到该位置的起始地址。

mcs:

500 

首先将 

地址中的内容复制到地址 

510 

中,然后将 

10F 

地址中的内容复制到 

50F 

中,如此操作直至将 

中。

要查看结果,请使用 

d(转储)命令,并使用 

命令指定目标地址。

复制操作对现有数据的影响 

如果新数据没有写入正在被复制的数据块中的地址,则源数据将保持不变。

但是,如果目标块已经包含数据(就象它在覆盖副本操作中一样),则将改写该数据。

(覆盖复制操作是指那些目标数据块部分内容覆盖原数据块部分内容的操作。

) 

执行覆盖复制操作 

命令执行目标地址的覆盖复制操作,而不丢失数据。

将改写的地址内容首先复制。

因此,如果将较高位地址的数据复制到较低位地址,则复制操作从原块的最低位地址开始并向最高位地址进行。

反之,如果要将数据从低地址复制到高地址,复制操作从原块的最高地址开始,向最低地址进行。

N(名称) 

指定 

l(加载)或 

w(写入)命令的可执行文件的名称,或者指定正在调试的可执行文件的参数。

要指定测试的可执行文件的参数,请使用以下语法:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1