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 *

這道指令會清除所有的中斷點。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章