SoftICE使用說明(六)

   §5.5 公用指令

指令:

A --- 組譯程式碼

S --- 搜尋資料

F --- 將資料填入記憶體

M --- 搬移資料

C --- 比較兩記憶區塊

A --- 組譯程式碼

語法: A [address]

解說:

Soft-ICE 的組譯器允許你把程式碼直接組譯進記憶體中。這個組譯器支援基
本的 8086 程式碼及 80186 、80286 真實定址模式的擴充。但是運算輔助器及
80386 的特殊程式碼、暫存器定址模式等無法組譯。

A 指令會進入 Soft-ICE 內建的組譯器。每行前會顯示位址當提示符號。當
組合語言之程式碼打入並按下Enter後,此程式碼會組譯進指定位址的記憶體中
。程式碼必需符合標準的 Intel 模式。在位址提示符號下按 Enter 會離開組譯

模式。

如果你正組譯的記憶體範圍在程式碼窗中是可見的,在你組譯時程式碼會交
互變化。

Soft-ICE 的組譯器支援標準的 8086 族指令,不過有些加強:

* DB 指令用來直接定義記憶體中之位元組資料。DB 指令後接一串位元組資
料 或/和 由空白、逗號分隔的字串。

* RETF 代表一個 far return 。

* WORD PTR 和 BYTE PTR 用來決定資料的大小。如:
MOV BYTE PTR ES:[1234],1

* 使用 FAR 和 NEAR 以明確的指定遠程或近程的跳躍或呼叫。如果未指定
FAR 、NEAR ,一律視爲 NEAR 。

* 參考到記憶體位置的運算域必需放在方括號中。如: MOV AX,[1234] 。

〔例〕 A CS:1234
這道指令會提示你輸入組合語言碼並從 CS:1234 開始組譯之。輸入最後一
道程式碼後在位址提示符號後按 Enter 。

S --- 搜尋資料

語法: S address L lebgth data-list

data-list --- 一串位元組資料或以逗號、空白分隔的加引號字串。加引號
的字串可以使用單引號或雙引號。

length --- 位元組長度。

解說:

S 指令會在記憶體中搜尋和 data-list 相同之位元組或字元。搜尋的動作由
指定的 address 開始,持續搜尋length位元組。每個發現的位址都會顯示出來


〔例〕 S DS:SI+10 L CX 'Hello',12,34
這道指令會從目前的資料節段中差距位址爲 SI+10 處開始搜尋 Hello 字
串後接 12h 、13h 的資料。搜尋會持續 CX 位元組才停止。

H --- 將資料填入記憶體

語法: F address L length data-list

data-list --- 一串位元組資料或以逗號、空白分隔的加引號字串。加引號
的字串可以使用單引號或雙引號。

length --- 位元組長度。

解說:

F 指令會用指定的 data-list 來填滿記憶體。填入的動作會從指定的
address 開始並持續 length 位元組。如果有需要會重覆 data-list 。

〔例〕 F 8000:0 l 100 'Test'
這道指令會從 8000:0000 開始填入 100h 位元組的 Test 。Test 字串會
一直重覆直到填完指定的長度。

M --- 搬移資料

語法: M start-address L length end-address

length --- 位元組長度。

解說:

M 指令會從指定的 start-address 搬移 length 位元組的資料到
end-address 。

〔例〕 M 1000:0 L 200 2000:0
這道指令會從記憶體位址 1000:0000 處搬移 200h 位元組的資料到
2000:0000 處。

C --- 比較兩記憶區塊

語法: C address1 L length address2

length --- 位元組長度。

解說:

C 指令會拿 address1 處 length 位元組大小的記憶體區塊和 address2 處
之資料做比較。如果第一塊區塊的值和第二塊的值不同時會顯示兩者各自之值及

其記憶體位址。

〔例〕 C 5000:100 L 10 6000:100
這道指令會比較從記憶體位址 5000:100 開始 10h 位元組之記憶體區塊和
從 6000:100 開始 10h 位元組的記憶體區塊之值。

§ 5.6 特別的除錯指令

指令:

SHOW --- 顯示在 history buffer 中之程式碼

TRACE --- 進入模擬追蹤模式 (trace simulation)

XT --- 在模擬追蹤模式中進行單步執行

XP --- 在模擬追蹤模式中進行程式單步

XG --- 在模擬追蹤模式中執行到某位址

XRSET --- 重設回溯追蹤緩衝區 (back trace buffer)

VECS --- 儲存/還原/比較插斷向量

SNAP --- 拍下記憶體區段的快照

EMMMAP --- 顯示 EMM 分配圖

SHOW --- 顯示在 history buffer 中之程式碼

語法: SHOW [B | start]

B --- 這會使 SHOW 指令從緩衝區中最早的程式碼開始顯示。

start --- 從緩衝區中最後一個程式碼(最後抓入之程式碼)之前多少程式
碼開始顯示。

解說:

SHOW 指令會顯示在回溯追蹤緩衝區中之程式碼。如果有程式碼之原始碼,會
以混合的方式顯示;否則只顯示程式碼。

SHOW 指令可以用上、下、PageUp 、PageDown 等鍵來捲動。按 Esc 鍵以離
開 SHOW 指令。

在每道程式碼位址之前有個緩衝區記入號碼。這個號碼錶示你多深入顯示緩
衝區。號碼越高表示你在緩衝區中更深的地方。

〔注〕在使用 SHOW 指令之前必需先用範圍回溯追蹤記錄程式碼。參閱第九
章以取得更多有關範圍回溯追蹤的資訊。

〔建議〕把程式碼窗設爲可見並在其中顯示目前回溯追蹤緩衝區之真正程式碼區

段是很有用的。以此比較程式碼和真正之流程時較不會爲跳躍和呼叫困
擾。

在 TRACE 指令後接著使用 SHOW 指令可以讓你用兩種不同的觀點來看在回溯
追蹤緩衝區中之程式碼。

〔例〕 SHOW 40
這道指令會從回溯追蹤緩衝區倒數第 40 個程式碼開始顯示。

TRACE --- 進入模擬追蹤模式 (trace simulation)

語法: TRACE [start] | [OFF]

start --- 從緩衝區中最後一個程式碼(最後抓入之程式碼)之前多少程式
碼開始模擬追蹤。

OFF --- 離開模擬追蹤模式。

解說:

TRACE 指令讓你可以把回溯追蹤緩衝區中之程式碼以宛如第一次執行之情形
再重播一次。你必需把程式碼窗設爲可見才能使用模擬追蹤模式。進入模擬追蹤

模式後,你可以使用 XT 、XP 和 XG 指令來追蹤緩衝區中之程式碼。

輸入 TRACE OFF 以離開模擬追蹤模式。

未加參數的 TRACE 指令會顯示目前模擬追蹤模式是 ON 或 OFF 。

〔注〕在使用 TRACE 指令之前必需先用範圍回溯追蹤記錄程式碼。參閱第九章以

取得更多有關範圍回溯追蹤的資訊。

〔建議〕在程式碼窗設爲可見之狀態下模擬追蹤模式可發揮最大功能。把 TRACE

指令和 SHOW 指令連接使用是很有用的。這會同時以兩種不同的型式顯
示回溯追蹤緩衝區中之程式碼。

〔例〕 TRACE 40
這道指令會從回溯追蹤緩衝區倒數第 40 個程式碼開始進入模擬追蹤模式
。在輸入 TRACE OFF 指令之前會一直留在模擬追蹤模式。

XT --- 在模擬追蹤模式中進行單步執行

語法: XT [R]

R --- 反向進行單步執行。

解說:

XT 指令會單步執行在回溯追蹤緩衝區中之程式碼。這個指令的行爲類似普通
除錯中之 T 。要注意的是在模擬追蹤模式中單步執行不會改變除了 CS 、IP 外

之暫存器的值。

XT 指令讓你可以重播回溯追蹤緩衝區中之程式碼。

〔注〕在使用 XT 指令之前必需先進入模擬追蹤模式。參閱第九章及 TRACE 指令

以取得更多有關範圍回溯追蹤的資訊。

〔建議〕如果你常常使用 XT 指令,它可以像其它指令一樣設個功能鍵代替。

〔例〕 XT
這道指令會在模擬追蹤模式中單步執行一道程式碼。

XP --- 在模擬追蹤模式中進行程式單步

語法: XP

解說:

XP 指令會在回溯追蹤緩衝區中進行一程式單步。這個指令的行爲類似普通除
錯中之 T 。要注意的是除了 CS 、IP 外之暫存器的值均不會改變。

XP 指令讓你可以重播回溯追蹤緩衝區中之程式碼。

〔注〕在使用 XP 指令之前必需先進入模擬追蹤模式。參閱第九章及 TRACE 指令

以取得更多有關範圍回溯追蹤的資訊。

〔建議〕如果你常常使用 XP 指令,它可以像其它指令一樣設個功能鍵代替。

〔例〕 XP
這道指令會在模擬追蹤模式中程式單步一道程式碼。

XG --- 在模擬追蹤模式中執行到某位址

語法: XG [R] address

R --- 反向搜尋位址。

address --- 回溯追蹤緩衝區中欲執行到之位址。

解說:

XG 指令會把程式碼指標移到回溯追蹤緩衝區中指定之位址的下一道程式碼。
如果在位址之前有加 R 的話會把程式碼指標移到指定位址的前一道程式碼。

address 必需是一道程式碼敘述的第一位元組。

XG 指令的行爲類似普通除錯中之 G 。

〔注〕在使用 XG 指令之前必需先進入模擬追蹤模式。參閱第九章及 TRACE 指令

以取得更多有關範圍回溯追蹤的資訊。

〔例〕 XG 273:1030
這道指令會把程式碼指標移到位址 273:1030 的後一道指令。

XRSET --- 重設回溯追蹤緩衝區 (back trace buffer)

語法: XRSET

解說:

XRSET 指令會重設回溯追蹤緩衝區。如果在回溯追蹤緩衝區中有你不想要的
程式碼時,在設定回溯範圍時要先執行這個指令。

〔例〕 SRSET
這道指令會重設回溯追蹤緩衝區。

VECS --- 儲存/還原/比較插斷向量

語法: VECS [C|S|R]

C --- 比較目前的插斷向量表和儲存起來之表。

S --- 儲存目前插斷向量表。

R --- 由緩衝區中還原插斷向量表。

解說:

VECS 指令允許你把插斷向量表儲存到 Soft-ICE 中之內建緩衝區或還原之。
你也可以比較真正的插斷向量表和儲存起來之表並顯示出兩者間不同之處

使用 C 指令比較目前的插斷向量表和儲存之向量表時,會以下列格式顯示:

address old-vector new-vector

每個有改變的插斷向量均會顯示出來。

載入 Soft-ICE 時之插斷向量表會被儲存起來。當程式以 LDR.EXE 載入時也
會自動儲存向量表。只有一份插斷向量表會被儲存,所以每次執行 VECS S 時上

一份備份的插斷向量表會被覆寫掉。

如果沒有加參數則會顯示整個插斷向量表。

〔例〕 VECS C
這道指令會比較真正的插斷向量表和上次儲存在 Soft-ICE 內建緩衝區中
之插斷向量表。

SNAP --- 拍下記憶體區段的快照

語法: SNAP [C | S | R] address1 address2

C --- 比較緩衝區和記憶體範圍。

S --- 把記憶體範圍存到緩衝區中。

R --- 從緩衝區還原記憶體範圍。

解說:

SNAP 指令會拍下記憶體區段的快照以供稍後的比較用。用 S 參數會把一記
憶體範圍備份到延伸記憶體中之緩衝區裏。使用 C 參數會顯示延伸記憶體中緩衝

區和指定的位址範圍之真實記憶體間不同之處。加上 R 參數則會把延伸記憶體中

之緩衝區拷貝到主記憶體中之位址範圍。

如果使用 C 參數來比較緩衝區和位址範圍,則會以下列格式輸出:

address old-data new-data

每一改變的位元組都會顯示出來。

使用 C 和 R 指令時通常不需加 address 。如果沒有指定 address ,則會
使用最後一次有加 address 之 SNAP 指令的 address 。

〔注〕要使用 SNAP 指令你必需在 CONFIG.SYS 中 S-ICE.EXE 那行加上
/TRA XXXX 參數。

SNAP 指令會把資料儲存到回溯追蹤緩衝區中。如果你正在使用回溯追蹤則會
和 SNAP 起衝突。如果你在回溯追蹤緩衝區中有程式碼資料時使用 SNAP S 指令

會把回溯追蹤資訊覆寫掉。反過來說,如果你用 SNAP 指令儲存一區段然後又打

開範圍回溯追蹤則會覆寫掉 SNAP 的緩衝區。

〔例〕 SNAP S 2000:0 4000:0
這道指令會把從 2000:0 到 4000:0 的資料區段存到 Soft-ICE 的回溯追
蹤緩衝區。

EMMMAP --- 顯示 EMM 分配圖

語法: EMMMAP

解說:

EMMMAP 指令會顯示 EMM 記憶體中每一個可取得的 page 及目前映射到的
page 。

〔注〕你必需啓動 Soft-ICE 的 EMM 特性才能使用這個功能。參閱第八章以
取得更多有關啓動 EMM 能力的資訊。

〔例〕 EMMMAP
這會以下列的格式顯示目前 EMM 的分配情形:

Phy Page Seg addres Handle/Page
00 D000 FFFF
01 D400 0001/0000
02 D800 0001/0001
03 DC00 0001/0002

在這個範例中,page 0 是在 D000 且沒有映射。pgae 1 是在 D400 ,
handle 是 1 且 page 0 映射到此。page 2 是在 D800 ,handle 是 1 且
page 1 映射到此。page 3 是在 DC00 ,handle 是 1 且 page 2 映射到此。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章