⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 盗版 (2001年4月4日).txt

📁 自己对DELPHI学习的一点体会
💻 TXT
📖 第 1 页 / 共 5 页
字号:
这道指令将复合 0 号、2 号、3 号中断点。只有当三个的条件均成立时才 
会引发中断。例如:如果 2 号 和 3 号的条件均成立一次以上,但 0 号的条 
件尚未成立,则只有当 0 号的条件成立时才会引发中断。 

§4.3 处理中断点 

Soft-ICE 提供许多指令来处理中断点。处理类的指令可以用来列出、修改、删 
除、启动和中止中断点。中断点是以由 0h 到 Fh 的中断点号码来识别的。处理中 
断点的指令有: 

BD --- 中止中断点 

BE --- 启动中断点 

BL --- 列出中断点 

BPE --- 编辑中断点 

BPT --- 把中断点当样板 

BC --- 清除中断点 

BD --- 中止中断点 

语法: BD list | * 

list --- 一串由逗号或空白分开的中断点号码。 

* --- 中止所有中断点。 

解说: 

BD 指令是用来暂时中止中断点的活动的。中断点可用 BE 指令(启动中断点 
)重新启动。 

你可以用 BL 指令列出中断点以察看哪些中断点被中止了。被中止的中断点 
其中断点号码後会有一个 * 。 

〔例〕 BD 1,3 
这道指令会暂时中止 1 号和 3 号中断点。 

BE --- 启动中断点 

语法: BE list | * 

list --- 一串由逗号或空白分开的中断点号码。 

* --- 启动所有中断点。 

解说: 

BE 指令是用来重新启动被 BD 指令中止的中断点。当中断点第一次定义时将 
会自动启动。 

〔例〕 BE 3 
这道指令会启动 3 号中断点。 

BL --- 列出中断点 

语法: BL 

解说: 

BL 指令会显示所有目前设定的中断点。BL 指令会列出每个中断点的中断点 
号码、中断点条件、中断点状态和计数。 

中断点的状态分为启动和中止。中止的中断点其中断点号码後会有个 * 。在 
BPAND 指令中使用到的启动的中断点其中断点号码後面会有个 & 。最後一个引发 
中断的中断点会以高亮度显示。 

BL 指令没有参数。 

〔例〕 BL 
这道指令会显示所有定义的中断点。以下列出一个 4 个中断点的例子: 

0) BPMB 1234:0000 W EQ 0010 C=03 
1) BPR B000:0000 B000:1000 W C=01 
2) BPIO 00021 W NE OOFF C=01 
3) BPINT 21 AH=4C C=01 

BPE --- 编辑中断点 

语法: BPE break-number 

解说: 

BPE 指令会把中断点的叙述放到编辑行以供修改。然後你可以用编辑键重新 
编辑,按 Enter 重新输入。这个指令让你可以快速修改原有中断点的参数。 

〔例〕 BPE 1 
这道指令会把 1 号中断点的叙述搬到编辑行并清除原 1 号中断点。按 
Enter 可以把这个中断点重新输入。 

BPT --- 把中断点当样板 

语法: BPT break-number 

解说: 

BPT 指令会把已存在的中断点叙述拿来当新中断点的样板。 

原存在的中断点叙述会被放到编辑行去。中断点号码所指的中断点并没有任 
何改变。这个指令让你可以快速的设置和原中断点相似的新中断点。 

〔例〕 BPT 3 
这道指令会把 3 号中断点的样板放入编辑行。当你按下 Enter 後会增加 
一个新中断点。 

BC --- 清除中断 

语法: BC list | * 

list --- 一串由逗号或空白分开的中断点号码。 

* --- 启动所有中断点。 

解说: 

BC 指令是用来永远清除一个或多个中断点的。 

〔例〕 BC * 
这道指令会清除所有的中断点。 


第 五 章 使用其它指令 

§5.1 显示及编辑类指令 

指令: 

U --- 反组译或显示原程式码 

R --- 显示或更改暂存器 

MAP --- 显示系统记忆体分布图 

D --- 用最後一次指定的形式显示记忆体 

DB --- 以位元组的形式显示记忆体 

DW --- 以字组的形式显示记忆体 

DD --- 以双字组的形式显示记忆体 

E --- 用最後一次指定的形式编辑记忆体 

EB --- 以位元组的形式编辑记忆体 

EW --- 以字组的形式编辑记忆体 

ED --- 以双字组的形式编辑记忆体 

INT? --- 显示最後一次呼叫的插断号码 

? 或 H --- 显示辅助讯息 

VER --- 显示 Soft-ICE 的版本号码 

U --- 反组译或显示原程式码 

语法: U [address] [L [=] length] 

length --- 要反组译的程式码长度 

解说: 

U 这个指令会显示正在除错的程式的程式码。 

如果没有指定 length ,内定值是 8 行或萤幕长度减一。 

如果未指定 address ,这个指令会从最後一次反组译的後一位元组开始反组 
译。如果从未使用过反组译指令,则从目前 CS:IP 开始。 

如果程式码窗是可见的,则程式码会显示在其中。 

如果指定的位址范围的原始程式码有载入,由目前的原始码模式来决定是否 
显示原始码。 

〔例〕 U $-10 
这道指令从目前位址的前 10h 位元组开始反组译。 

〔例〕 u .499 
这道指令会从 499 行开始显示 原始码。程式码窗必需是可见的且必需在 
原始码模式。 

R --- 显示或更改暂存器 

语法: R register-name [ [=] value ] 

register-name --- 为下列任一: 
AL 、AH 、AX 、BL 、BH 、BX 、CL 、CH 、CX 、DL 
DH 、DX 、DI 、SI 、BP 、SP 、IP 、CS 、DS 、ES 
SS 、或 FL 

value --- 如果 register-name 不是 FL ,value 是个 16 进位值或运算式 
。若 register-name 为 FL ,value 下列旗号符号一或多个的组 
合。旗号符号可视需要在前面加上 + 或 - 。 

O -- Overflow flag 溢位旗号 
D -- Direcrion flag 方向旗号 
I -- Interrupt flag 插断旗号 
S -- Sign flag 正负号旗号 
Z -- Zero flag 零值旗号 
A -- Auxiliary carry flag 辅助进位旗号 
P -- Parity flag 极性旗号 
C -- Carry flag 进位旗号 

解说: 

R 指令是用来显示或更改暂存器之值的。 

如果没有指定参数会显示所有暂存器和旗号的值及目前 CS:IP 的程式码。 

如果仅指定 register-name 而未加 value ,则 Soft-ICE 会显示指定暂存 
器现在的值并提示你输入新值。如果 register-name 是 FL ,目前设置的旗号会 
以高亮度大写显示;未设置的旗号则用普通小写显示。要维持现在暂存器的值, 
直接按 Enter 。 

如果 register-name 和 value 均有指定,则指定的暂存器的值将被改成 
value 。 

想要改变旗号的值,把 FL 当 register-name ,後接你想切换的旗号符号。 
如果要设置某旗号,在旗号符号前加上 + 。要关闭某旗号,则在旗号符号前加上 
一个 - 。旗号可以按任何顺序排列。 

〔例〕 R AH 5 
这道指令会把 AH 暂存器的值改成 5 。 

〔例〕 R FL = O Z P 
这道指令会切换 O 、Z 、P 旗号的值。 

〔例〕 R FL 
这道指令会显示目前旗号的值并让你可以修改其值。 

〔例〕 R FL O +A -C 
这道指令会切换 O 旗号,设置 A 旗号并关闭 C 旗号。 

MAP --- 显示系统记忆体分布图 

语法: MAP 

解说: 

MAP 指令显示各记忆体部份的名称、位置和大小。大小是以页来计算的。一 
页等於 10h byte 。 

CS:IP 所指的部份会以高亮度显示。 

使用 MAP 指令的时机: 

* 中断点发生时指向未知的记忆体区段。 

* 你想控制常驻程式或系统程式。你可以根据 MAP 指令所显示的开始位址 
汉大小来设置范围中断点。 

* 你怀疑程式或系统在其记忆体空间之外写码。MAP 指令可用来找出此区段 
的记忆体位址以便在 CSIP 中使用。 

* 你必需找出哪个常驻程式拥有目前的插断向量。 

〔例〕 MAP 
以下是这道指令显示的范例: 

.......... 

若 DOS 的版本低於 3.1 ,将显示程式的位址而非其程式名称。 

D DB DW DD --- 显示记忆体 

语法: D [size] [address] [ L [=] length ] 

size --- B -- byte W -- word D -- double word 

length --- 要显示几位元组。 

解说: 

D 这个指令会显示指定位址的记忆体内容。 

记忆体内容是以指定的 size 的形式显示。如果没有指定 size ,会以最後 
一次使用的 size 来显示。所有的形式均会显示 ASCII 码。 

如果未指定 address ,则由前一次显示的最後一位元组的後一位元组开始显 
示。 

如果没有指定 length ,内定值是 8 行或因视窗较小而少一些。 

若资料窗是可见的,则资料会显示在资料窗且 length 会被忽略。 

〔例〕 DW DS:00 L=8 
这道指令会以字组和 ASCII 的形式显示目前资料节段的前 8 位元组。 

E EB EW ED --- 以位元组的形式编辑记忆体 

语法: E [size] address [data-list] 

size --- B -- byte W -- word D -- double word 

data-list --- 一串指定之 size 的资料,(位元组、字组或双字组)或以 
逗号、空白分隔的加引号字串。加引号的字串可以使用单引 
号或双引号。 

解说: 

E 指令显示指定位址的记忆体内容并让你编辑其值。 

这个指令以 ASCII 的形态显示记忆体内容,并且是以指定的 size 形态。 

记忆体编辑器让你可以快速的更新记忆体。你可以键入 ASCII 字元或打入位 
元组、字组、双字组之值以编辑记忆体。如果没有指定 size ,以最後一次使用 
的 size 为准。以下是记忆体编辑的按键: 

--- 游标上移 
--- 游标下移 
--- 游标右移 
--- 游标左移 
SPACE --- 游标移至下一个元素上 
TAB --- 在数字区和 ASCII 区间切换 
ESC 或 Enter --- 离开记忆体编辑器 

在你输入资料之时,真正记忆体上的值也随之更新。所有的数字值都是以 16 
进位表示。按 TAB 键可以在数字区和 ASCII 区间切换。 

如果资料窗是可见的,则在其中修改资料;否则在指令窗中修改。 

资料显示的长度,在指令窗中内定为 8 行。如果资料窗是可见的,则和资料 
窗同大小。 

如果未加参数且资料窗是可见的,则游标会移到资料窗中。若资料窗是不可 
见的,则在指令窗中由最後一次显示或编辑的位址开始进行编辑。 

〔例〕 EB 1000:0 
这道指令由 1000:0000 开始,以位元组的形态,用数字和 ASCII 字元显 
示资料的值。你可以编辑这些显示出来的值。 

〔例〕 EB 8000:0 "HELLO",0D 
这道指令把从 8000:0000 开始的值以 HELLO 字串和一个归位字元代替。 

INT? --- 显示最後一次呼叫的插断号码 

语法: INT? 

解说: 

INT? 指令显示最後一次发生的插断号码及其位址。 

〔例〕 INT? 
以下是 INT? 显示结果的例子: 

Last Interrupt: 16 
At: 0070:0255 

这个例子显示在 Soft-ICE 视窗被叫出之前,系统最後一次呼叫的是 16h 
插断,位址在 0070:0255 。如果最後一次插断是个软体插断,从 0070:0255 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -