SOFTICE 使用说明 (断点)

作者:kill

  
   第 四 章 如何使用中断点指令

§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 提供许多指令来处理中断点。处理类的指令可以用来列出、修改、删
除、启动和中止中断点。中断点是以由 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 *
这道指令会清除所有的中断点。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录: 本手册的功能 读者对象 本手册的组织结构 排版风格 如何使用本手册 其它相关文件 (外国人就是罗嗦,为了求全,只好随他了。) 第一章 欢迎使用SoftICE 产品概况 介绍SoftICE 介绍Symbol Loader 如何得到客户服务 联系NuMega公司的技术支持中心 第二章 安装SoftICE 介绍 硬件和软件要求 SoftICE显示选择 安装之前 安装 安装之后 配置BOOT。INI以便在多处理器系统中支持单CPU 配置SoftICE在Windows 95下正确载入 通过串行口连接第二台计算机 解决显卡问题 第三章 SoftICE教程 介绍 载入SoftICE 构造GDIDEMO样本程序 装入GDIDEMO样本程序 控制SoftICE屏幕 通过源码跟踪和逐步调试 读本地数据 设定断点和目标断点 设定一个断点 设定STICKY断点 (此处不知STICKY作何解释。待我读到此处时大概会明白) 使用SoftICE命令行信息 使用符号和符号表 设定条件断点 设置BPX断点 编辑断点 设定读写内存断点 第四章 将代码装入SoftICE 调试的概念 准备调试程序 准备调试设备驱动程序和VxDs(虚拟设备驱动程序) 手工装入SoftICE 装入SoftICE for Windows 95 装入SoftICE for Windows NT 构造带有调试信息的程序 使用Symbol Loader转换和载入文件 修改模块设定 修改通用设定 修改编译设定 修改调试设定 指定程序的源文件 删除符号表 在DOS命令行里使用Symbol Loader 使用Symbol Loader的命令行工具 NMSYM命令行的语法 使用NMSYM来转换符号信息 使用NMSYM来装入模块和符号信息 使用NMSYM来装入或导出符号表 使用NMSYM卸载符号信息 使用NMSYM来保存历史记录 关于NMSYM的信息 第五章 SoftICE导航 介绍 呼出SoftICE窗口 启动时禁用SoftICE 使用SoftICE窗口 调整窗口大小 控制窗口 拷贝和粘贴数据 用鼠标输入命令 得到帮助 使用命令窗口 滚动窗口 键入命令 重呼命令 使用运行时宏 将命令窗口的历史缓存保存到文件 相关命令 控制代码窗口 读信息 在代码窗口键入命令 使用本地窗口 控制本地窗口 扩展和分解堆栈 相关命令 使用观察窗口 控制观察窗口 设定观察表达式 读信息 扩展和分解类型表达式 相关命令 使用寄存器窗口 控制寄存器窗口 读信息 编辑寄存器和标志位 相关命令 使用数据窗口 控制数据窗口 读信息 改变内存地址和格式 编辑内存 辅助表达式 相关命令 第六章 使用SoftICE 在跟踪错误时调试多个程序 跟踪错误 Ring-3 32位保护模式(Win32程序) Ring-0 驱动代码(内核模式设备驱动程序) Ring-3 16位保护模式(16位Win程序) 地址内容 使用INT 0x41 .DOT命令 理解从R-3到R-0的转变 第七章 使用断点 第八章 ----------------------------------------------------------- (...很累人那!今天就这些了吧.因为我也是读一些翻译一些,所以有些"向前引用 "的名词术语不知道要如何解释其意义.应该读完再翻译比较好...不过那个时候我 又开学了...呜...一点时间也没有了!) 第七章 使用断点 介绍 SoftICE所支持的断点类型 断点选项 执行断点 内存断点 中断断点 I/O断点 窗口消息断点 理解断点的含义 虚断点 设置断点活动 条件断点 条件断点计数功能 在条件表达式中使用本地变量 在条件断点里引用堆栈 参考 多重断点 所用时间 断点统计 在表达式中引用断点 维护断点 使用内嵌断点 第八章 使用表达式 表达式 操作符 操作符优先级 形成表达式 表达式类型 定制类型 取得符号的数值 间接使用符号 第九章 装入系统组件符号 装入由DLL和EXE文件导出的符号表 使用未命名的入口点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值