📄 盗版 (2001年4月4日).txt
字号:
这道指令将复合 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 + -