第 三 章 30分鐘內學會 DEBUG
§3.1 序言
Soft-ICE 的所有動作都發生在一個可以隨時叫出的視窗中。Soft-ICE 的所有指
令都可以顯示在一個小視窗中,但這個視窗可以擴大到整個螢幕。當你把
Soft-ICE
當做其它除錯程式的助手使用時,你可能會使用小視窗。當你把 Soft-ICE 當獨立
除錯器用時,你可能會使用大視窗。
如果你使用原來磁片上的設定檔( S-ICE.DAT ),那視窗一開始是佔滿整個螢幕
的。
§3.2 叫出視窗
載入Soft-ICE後,你可以隨時叫出視窗。一開始你只要按Ctrl-D即可叫出
Soft-ICE。
使用ALTKEY的指令可以更改此熱鍵。(參閱§5.8)
§3.3 由視窗中返回
使用 X 這個指令或你叫出 Soft-ICE 的熱鍵均可以回到原先的畫面。你在
Soft-ICE
中設定的所有中斷點此時開始啓動。
§3.4 改變視窗大小
你可以改變Soft-ICE視窗的寬度和高度。在獨立模式中顯示程式碼時,改變視窗大
小
的功能特別有用。視窗的高度爲 8 到 25 行。按
Alt - ↑ 使視窗變高
Alt - ↓ 使視窗變短
使用 WIN 的指令以改變視窗的寬度。( 參閱 §5.9)直接輸入WIN而不加參數
會在
下面兩種模式中切換:
WIDE 模式 --- 佔滿整個螢幕
NARROW 模式 --- 46 個字元寬
有些指令像 D 、E 、R 、U ,使用 WIDE 模式以顯示更多訊息時較爲方便。
§3.5 移動視窗
Soft-ICE 的視窗是可以移動且可以定位在螢幕上的任何地方。這功能在NARROW模
式下
特別有用。在你需要時移動視窗以便觀看螢幕上被視窗擋到的地方。你可以用下列
按
鍵控制螢幕的移動:
Ctrl - ↑ 向上移一行
Ctrl - ↓ 向下移一行
Ctrl - → 向右移一列
Ctrl - ← 向左移一列
§3.6 行編輯按鍵
Soft-ICE 容易使用的行編輯器讓你可以叫回並編輯上一個指令。它的功能類似
那些有名的 CED 行編輯器。以下按鍵可以幫助你在命令窗中編輯指令:
→ --- 遊標右移
← --- 遊標左移
Ins --- 切換插入模式
Del --- 消除現在字元
Home --- 把遊標移到一行的開頭
End --- 把遊標移到一行的結尾
↑ --- 顯示上一個指令
↓ --- 顯示下一個指令
Shift - ↑ --- 顯示向上卷一行
Shift - ↓ --- 顯示向下卷一行
Page Up --- 顯示向上卷一頁
Page Down --- 顯示向下卷一頁
BackSpace --- 消除前一個字元
Esc --- 取消目前命令
當遊標在資料窗或程式碼窗時,另有特殊的按鍵,這在後面將會討論到。
§3.7 動作狀態行
在螢幕底部的狀態行提供指令語法的輔助。
§3.8 指令語法
Soft-ICE 是個由指令操控的除錯工具。要令 Soft-ICE 有動作,你要下指令給
它。指令可以因不同參數而有改變。
所有的指令都是 1 到 6 個字元的字串且不分大小寫。所有的參數都是字串或
運算式。
運算式是典型的數字,也可以是數字和運算子的結合。所有的數字均以 16 進
位表示。一個位元組 (byte) 參數有 2 位,字組 (word) 參數有 4 位。雙字組
(double word) 是兩個由 : 分隔的字組參數。以下是一些參數的例子:
12 --- 位元組參數
10FF --- 字組參數
E000:0100 --- 雙字組參數
暫存器在運算式中可以拿來當位元組或字組參數用。例如: U CS:IP -10 的指
令會從現在指令指標所指位址向前 10 byte 開始反組譯。以下的暫存器名稱可以
用
在運算式中:
AL 、AH 、AX 、BL 、BH 、BX 、CL 、CH 、CX 、DL 、DH 、DX 、DI 、
SI 、BP 、SP 、IP 、CS 、DS 、ES 、SS 、FL
§3.8.1 指定記憶體位址
許多 Soft-ICE 的指令要求以記憶體位址當參數。一個記憶體位址是由兩個
16 位元的字組中間以分號 (:) 分隔而組成的。第一個字組表示節段位址
(segment
address) 而第二個字組表示差距位址 (offset segment) 。
公用符號可以在所有 Soft-ICE 指令中用來取代位址。公用符號必需先由
Soft-ICE 的程式載入器 (LDR.EXE) 載入。參閱第七章以取得使用公用符號的完
整說明。
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 埠被寫入且造成其高位元被設定則會引發中斷。