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

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

📁 自己对DELPHI学习的一点体会
💻 TXT
📖 第 1 页 / 共 5 页
字号:
Soft-ICE 运算式的运算器接受一些特殊字元和位址的使用。这些字元是: 

$ --- 现在 CS:IP 所指的位址 
@位址 --- 间接双字组 
.number --- 原始程式码行号 

当你要输入目前指令指标的位址时,可以用 $ 代替 CS:IP 。 

使用 @ 可以让你参考到位址所指处的双字组。你可以使用多层的 @ 。 

如果用 . 来代表位址,它是用来代表原程式码中的行号,而非实际的位址。 
这只有在原始程式码有载入的情形下才能使用。这种情况下,位址是以 10 进位 
表示。 

例如: 

U.1234 --- 从原始程式码第 1234 行开始反组译 
U $-10 --- 从目前指令指标所指处向前 10 byte 开始反组译 
G @SS:SP --- 假如你目前正在第一个中断程序,下这个指令会在堆叠的 
返回位址设个暂时中断点并跳过此中断程序。 

§3.9 功能键 

功能键可以代替一串 Soft-ICE 中之指令。功能键可以由命令行设定或从 
S-ICE.DAT 中定义。 

Soft-ICE 磁片上原来的 S-ICE.DAT 已经对 12 个功能键有设定。你可以在任 
何时候改变任何一个设定。个键定义如下表所示。这样设计是为了方便微软的 
CodeView 的使用者。 

F1 --- 显示一般辅助画面 ( H; ) 
F2 --- 在暂存器窗中切换 ( ^WR; ) 
F3 --- 改变目前原始码的模式 ( ^SRC; ) 
F4 --- 回复视窗 ( ^RS; ) 
F5 --- 回到原程式 ( ^X; ) 
F6 --- 在命令窗中和程式码窗中切换 ( ^EC; ) 
F7 --- 执行到游标所在那行 ( ^HERE; ) 
F8 --- 单步执行 ( ^T; ) 
F9 --- 在游标所在那行设中断点 ( ^BPX; ) 
F10 --- 单步执行 ( ^P; ) 
F11 --- 执行到返回位址 ( ^G @SS:SP; ) 
F12 --- 显示 Soft-ICE 的版别 ( ^VER; ) 

指令前的 ^ 会让这个指令不显示出来。指令後的 ; 则代表按下 Enter 。输入 
FKEY 的指令可以显示目前功能键所代表的意义。要使用功能键直接按下功能键即可 
,不需再键入指令。要自定功能键,参阅 §5.8 FKEY 指令的解说或第六章有关 
在 S-ICE.DAT 设定功能键的部份。 

§3.10 辅助 

利用辅助的指令可以得到有关指令的简单解说、语法和使用例子。要得到辅助 
的资讯,键入: 

? 或 H --- 显示所有指令和运算子的简短解说 

? 指令 或 H 指令 --- 显示关於指令语法和例子更详细的资讯 

? 运算式 或 H 运算式 --- 把运算式的结果以 16 、10 进位及 ASCII 码 
显示出来 

§3.11 课程 

(好多喔....偷懒一下,跳过去吧!) 


┌——————————————————┐ 
│ 第 二 节 指 令 │ 
└——————————————————┘ 

第二节包括每个指令的语法、解释及范例。所有的数字均以 16 进位表示。使 
用到 + - * / 或暂存器的数字均可视为运算式。所有的指令都不区分大小写。指令 
语法叙述中的斜体字需以真实的值代替而不是打入斜体字。 

以下是本节中所使用的代号: 

[ ] --- 语法中非必用的部份 

< > --- 可选用的部份 

X|Y --- 使用 X 或 Y ( X Y 择一使用 ) 

count --- count 指定中断点条件要成立几次才会真正引发中断。如果没 
有设定,内定值是 1 。每次引发中断而叫出 Soft-ICE 的视窗 
後,记数器自动回复为原先指定值。 

verb --- 指定在什麽状况下中断点会做用。R 代表读取;W 代表写入; 
RW 代表读取及写入;X 代表执行。 

address --- 位址。由两个 16 位元之字组以冒号分隔而组成。第一个字组 
代表区段位址,第二个字组代表差距位址。位址可以由符号或 
暂存器构成,也可以包括 $ 、. 、@ 等特殊符号。参阅 
§3.8 以取得更多资讯。 

break-number --- 中断点号码是在你修改中断点(即编辑、删除、重新启动 
、暂停作用)时使用的。它是用来代表各中断点的代码。 
中断点号码是由 0 到 F 。 

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

mask --- 由 1 、0 、X 所构成的位元遮罩。X 代表不处理的位元。 

例如: BPIO 21W EQ M 1XXX XXXX 
如果 21 埠被写入且造成其高位元被设定则会引发中断。 

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

§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 

⌨️ 快捷键说明

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