SoftICE使用说明(四)

如何使用中断点指令

 

§4.1 序言

 

Soft-ICE 具有以往只有硬体除错器才具有的中断点能力。因为 80386 晶片的

威力和弹性,使我们不需要额外的硬体设备就能有更强大的中断点能力。

 

中断点的触发可以由记忆体某位址的读取、记忆体范围的读取、程式的执行及

埠的存取来达成。Soft-ICE 赋与每个中断点一个一位的 16 进位号码(0-F

。这个中断点号码是当你对中断点做删除、中止、启动、编辑等动作时使用。

 

Soft-ICE 的所有中断点都是 "sticky" 。这个意思是这些中断点在启动後不会

自动消失。你必需以 BC BD 指令来消除或关闭它。Soft-ICE一次可以处理16

 

个中断点。同种形态的中断点最多可以有 10 个。但记忆体位址的中断点(BPM)

80386 处理器之暂存器的缘故,最多只能设 4 个。

 

中断点可以设个计数参数。计数参数是中断点真正触发作用前被忽略的次数。

 

§4.2 设置中断点

 

指令:

 

BPM BPMB BPMW BPMD --- 在记忆体位址被存取或执行时引发中断

 

BPR --- 对记忆体范围设置中断点

 

BPIO --- I/O 埠存取时触发中断

 

BPINT --- 呼叫插断时触发中断

 

BPX --- 设置 / 清除 执行中断点

 

CSIP --- CS:IP 范围的检定判断

 

BPAND --- 等待复合中断点的发生

 

BPM BPMB BPMW BPMD --- 在记忆体位址被存取或执行时引发中断

 

语法: BPM [size] address [verb] [qualifier value] [C=count]

 

size --- B W D

B -- byte 位元组 W -- word 字组 D -- Double word 双字组

size 是指中断点所涵盖的范围。举例来说,如果使用的是双字组

,而其第三个位元组被改变了,就会引发中断。如果有指定判断资

(qualifier) size 也是很重要的。

 

verb --- R W RW X

 

qualifier --- EQ NE GT LT M

EQ -- 相等 NE -- 不等 GT -- 大於

LT -- 小於 M -- 遮罩

qualifier 只有在读写中断点才有用到。

 

value --- 由中断点大小决定是位元组、字组或双字组的值

 

解说:

 

BPM 指令会在记忆体读、写或执行时引发中断。

 

verb 内定值为 RW size 内定值为 byte

 

除了 X 外的 verb 值会使程式执行引发中断的那段程式码。CS:IP 所指的是

引发中断的後一行程式码。如果verb值是X CS:IP 所指的是中断点设置的位

置。

 

如果设定的是 R ,当记忆体位址被读取或做没有改变的写入时,将引发中断。

 

如果设定的是 R W RW 时,指定的位址被执行时并不会引发中断。

 

〔注〕如果使用 BPMW ,指定的位址必需由字组边界开始。如果使用 BPMD

指定的位址必需指向一个双字组边界。

 

〔例〕 BPM 1234:SI W EQ 10 C =3

 

这道指令设定一个位元组的记忆体存取中断点。当10H第三次写入1234:SI

时将启动中断点。

 

〔例〕 BPM CS:1235 X

这道指令设定一个执行中断点。当 CS:1235 的程式码被执行时将引发中断

。此时 CS:IP 所指的就是中断点设定位址。

 

〔例〕 BPMW DS:F00 W EQ M 0XXX XXXX XXXX XXX1

这道指令设定一个字组的记忆体写入中断点。当 DS:F00 被写入一个高位

元为 0 ,低位元为 1 (其它位元不考虑)的资料时,将引发中断。

 

〔例〕 BPM DS:1000 W GT 5

这道指令设定一个位元组的记忆体写入中断点。当 DS:1000 被写入一个大

5 的值时,将引发中断。

 

BPR --- 对记忆体范围设置中断点

 

语法: BPR start-adderss end-address [verb] [C=count]

 

start-address end-address --- 界定范围的开始及结束位址

 

verb --- R W RW T TW

 

解说:

BPM 指令让你对一段记忆体范围设中断点。

 

除了 T TW 外的 verb 值均会执行引发中断的程式码。CS:IP 将指向引发

中断的下一段程式码。

 

你不能设定执行的范围中断点。如果想做到执行的范围中断点必需使用 R

程式码的引出被视为是对范围中断点的读取。

 

如果未指定 verb ,内定值是 W

 

在某些状况下,设置范围中断点会降低系统的性能。Soft-ICE 将会分析所有

对包括范围中断点的4K记忆体的读写动作。性能的降低通常无法察觉,但也可

能有严重降低的例外。

 

verb 值使用 T TW 将在指定范围内可以做回溯追踪 (back trace) 。它

们并不会真正引发中断而只是记录下程式码的资料。这个资料可以用 SHOW

TRACE 指令显示出来。参阅第九章以取得更多有关回溯追踪的资讯。

 

〔例〕 BPR B000:0 B000:1000 W

这道指令定义一个记忆体范围的中断点。任何对单色影像记忆体的写入均

会引发中断。

 

BPIO --- I/O 埠存取时触发中断

 

语法: BPIO port [verb] [qualifier value] [C=count]

 

port --- 一个位元组或字组形态的值

 

verb --- R W RW R -- read ( IN ) W -- write ( OUT )

 

qualifier -- EQ NE GT LT M

EQ -- 相等 NE -- 不等 GT -- 大於

LT -- 小於 M -- 遮罩

 

value -- 一个位元组或字组形态的值

 

解说:

 

BPIO 指令会在 I/O 埠读写时引发中断。

 

如果有指定 value 值,它将被拿来和引发中断的 IN OUT 程式码所读/

的真正资料值做比较。value可以是一个位元组或字组。如果是对一个位元组的

埠做 I/O ,则是使用较低的 8 位元来做比较。

 

CS:IP 将会指向引发中断之程式码的後一段程式码。

 

如未指定 verb ,内定值是 RW

 

〔例〕 BPIO 21 W NE FF

这道指令定义一个 I/O 埠存取中断点。如果一号中断控制器的遮罩暂存器

被写入除了 FFh 之外的值,将会引发中断。

 

〔例〕 BPIO 3FE R EQ M 11XX XXXX

这道指令定义一个位元组的 I/O 埠读取中断点。如果 3FEh I/O 埠被读取

,且这个值的二高位元是 1 时,将会引发中断。其它位元可以是任意值。

 

BPINT --- 呼叫插断时触发中断

 

语法: BPINT INT-NUMBER [ < AL | AH | AX > = value] [C=count]

 

int-number --- 0 FFh 的插断号码

 

value --- 一个位元组或字组的值

 

解说:

 

BPINT 指令可以在呼叫硬体插断或软体插断时引发中断。藉由指定 AX 暂存

器之值可以轻易分离指定的 DOS BIOS 呼叫。

 

如果没有指定 value 值,在呼叫指定的插断向量时将引发中断。这个插断可

以是硬体插断、软体插断或内部插断。

 

选定的 value 值当插断发生时将和指定的暂存器比较 (AH AL AX)

如果其值和指定的暂存器值相同时,将引发中断。

 

中断点引发时,如果是硬体插断,CS:IP 将指向此插断程序的第一段程式码

。使用INT?指令可以得知此插断呼叫发生时执行到哪里。如果是软体插断,则

CS:IP 将指向呼叫此插断的程式码。

 

〔例〕 BPINT 21 AH= 4C

这道指令定义一个 21h 插断的中断点。当 DOS 4Ch 函式(结束程式)被

呼叫时将引发中断。

 

BPX --- 设置 / 清除 执行中断点

 

语法: BPX [address] [C=count]

 

解说:

 

BPX指令让你在原始程式中设置/清除执行中断点。如果游标在程式码窗中

,则不需要输入位址,执行中断点将设置在目前游标所在位址。如果目前游标所

 

在位址已经设置一个执行中断点,则将清除此中断点。

 

如果程式码窗是不可见的或游标未在其中,则必!指定位址。如果只有指定差

距位址,目前的 CS 值会被当做节段位址。

 

〔注〕除非中断点的位置在 ROM 中,不然BPX 均使用INT 3的方式设置中断点

。用这样来取代中断点暂存器是为了能设置更多的中断点。如果你的处境

因某些原因必需使用中断点暂存器(例如说程式码未载入),你可以用

BPM 指令设置执行中断点。

 

〔例〕 BPX .1234

这道指令将在原始程式第 1234 行设置中断点。

 

CSIP --- CS:IP 范围的检定判断

 

语法: CSIP [OFF | [NOT] start-address end-address]

 

NOT --- 如果使用 NOT ,只有当 CS:IP 所指超出范围,才会引发中断。

 

OFF --- 停止对 CS:IP 的检定。

 

解说:

 

CSIP 指令会使中断点的成立条件由指令指标所指位址而定。这个功能在你怀

疑程式会突然修改其范围之外的程式码时特别有用。

 

当中断点条件成立时,CS:IP 暂存器会被拿来和指定的范围做比较。当其在

范围内时会引发中断。要在CS:IP指在范围外时引发中断,则需要用 NOT 参数。

 

 

如果没有加参数则会显示目前 CSIP 的范围。

 

〔例〕 CSIP NOT F000:0 FFFF:0

这个指令只有在中断点条件成立且 CS:IP 并未指向 ROM BIOS 时才会引发

中断。

 

 

BPAND --- 等待复合中断点的发生

 

语法: BPAND list | * | OFF

 

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

 

* --- 复合所有的中断点。

 

解说:

 

BPAND 指令会对二或多个中断点做逻辑的 AND 运算。只有当所有的中断点条

件均成立时才会真正引发中断。

 

有些情况下你会希望在许多不同条件均成立下才引发中断。BPAND 指令让你

指定二或多个在中断发生前必需成立的中断点。这个功能让你可以设置更复杂的

 

中断点条件。

 

每次使用 BPAND 指令均会把指定的中断点号码加入名单中,直到使用

BPAND OFF 指令为止。

 

你可以用 BL 指令列出中断点以察看哪些中断点号码被复合在一起。被复合

在一起的中断点其中断点号码後会有个 &

 

一旦中断点被复合後,除非此中断点被清除或 BPAND 被关闭才会中止。

 

〔例〕 BPAND 0,2,3

这道指令将复合 0 号、2 号、3 号中断点。只有当三个的条件均成立时才

会引发中断。例如:如果 2 3 号的条件均成立一次以上,但 0 号的条

件尚未成立,则只有当 0 号的条件成立时才会引发中断。

 

§4.3 处理中断点

 

Soft-ICE 提供许多指令来处理中断点。处理类的指令可以用来列出、修改、删

除、启动和中止中断点。中断点是以由0hFh的中断点号码来识别的。处理中

断点的指令有:

 

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 *

这道指令会清除所有的中断点。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SoftICE是一种在操作系统下进行硬件和软件调试的工具。它可以在调试过程中截取和更改数据,帮助开发人员分析和解决问题。以下是使用SoftICE的一般步骤: 1. 安装:首先,我们需要将SoftICE工具安装在计算机上。安装过程可能会涉及设置一些参数和路径。 2. 启动:一旦安装完成,我们可以启动SoftICE。启动时,SoftICE会与操作系统集成,并成为操作系统的调试器。 3. 设置断点:在调试过程中,我们可以通过设置断点来指示SoftICE在特定地点停止程序的执行。断点可以是内存地址、函数或特定条件。 4. 运行程序:启动SoftICE后,我们可以运行要调试的程序。一旦程序到达设置的断点,SoftICE就会自动停止程序执行,并开始调试。 5. 查看寄存器和内存:在SoftICE调试期间,我们可以查看寄存器和内存中的数据。这对于了解程序的状态和变量很有帮助。 6. 单步执行和跟踪:SoftICE还允许我们以单步方式执行程序,即逐行执行代码。我们可以逐步跟踪程序在执行过程中的每个细节。 7. 监测和修改数据:SoftICE可以让我们监视并修改程序中的数据。我们可以将变量的值更改为我们需要的值,以便测试和调试。 8. 寻找和解决问题:使用SoftICE,我们可以定位程序中的错误并解决问题。我们可以通过观察变量的值、内存中的数据以及程序的执行路径来识别问题所在。 综上所述,SoftICE是一种功能强大的调试工具,它可以帮助开发人员有效地调试和解决问题。使用SoftICE,我们可以查看程序的状态、修改数据,并找到错误所在,从而提高开发效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值