麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 邏輯算法 > 正文

SOFTICE 操作手冊

2019-09-10 09:02:29
字體:
來源:轉載
供稿:網友

 
. BPM
E HEAP32
P SRC WMSG
? BPR EC HWND PAGE SS WR
A BPRW EXIT I PAUSE STACK WW
ADDR BPT EXP I1HERE PCI SYM X
ALTKEY BPX F I3HERE PEEK SYMLOC XFRAME
ALTSCR BSTAT FAULTS IDT PHYS T XG
ANSWER C FILE LDT POKE TABLE XP
BC CLASS FKEY LHEAP PRINT SCREEN鍵 TABS XRSET
BD CLS FLASH LINES PROC TASK XT
BE CODE FORMAT LOCALS QUERY THREAD ZAP
BH COLOR G M R TRACE
BL CPU GDT MACRO RS TSS
BMSG CSIP GENINT MAP32 S TYPES
BPE DATA H MAPV86 SERIAL U
BPINT DEX HBOOT MOD SET VCALL
BPIO DIAL HEAP O SHOW WL


命令: .
作用: 在代碼窗口中定位當前指令
語法: .
用法: 當代碼窗口可見時 .命令(點命令)使得當前的CS:EIP
所指向的指令可見 并且高亮顯示. 另外此命令也把
SoftICE 從其他內存區域中切回原先彈出的內存區域.
詳見后面的ADDR命令.

點評:
當你在代碼窗口中上下瀏覽時有可能走得很遠 那么
這時一個"." 命令會讓你在下一瞬間回到SOFTICE當前
所在的CS:EIP處再也用不著按PGUPPGDOWN很多次了!


命令: ?
作用: 計算一個表達式的值
語法: ? 表達式
用法:
計算一個表達式的值.并以十六進制十進制帶符號的
十進制(<0時有)和ASCII值多種形式顯示計算結果.

點評:
一個非常高級的計算器 諸如46578*1999+ESI 之類的
計算不會再讓你煩惱另外由于可以顯示ASCII所以可
以很方便地在各種數制之間察看.


命令: A
作用: 寫入匯編代碼
語法: A [地址]
用法:
用SICE內置的匯編器在內存中寫入匯編代碼.匯編器支
持標準的80x86指令集.包括386486PentiumPentium
-ProMMX協處理器新版的SICE還支持AMD的3D Now!
PIIPIII的特有指令集.匯編將在A后的地址處開始.如
果在A后沒有加地址 那么匯編將在你上次匯編結束處
開始.如果你是第一次鍵入A命令且沒有追加地址那么
匯編將在當前CS:EIP處開始.另外鍵入A命令后 在單
獨一行指令欄中鍵入USE16或USE32將告訴匯編器是采
用16位還是32位指令默認是和當前的CS寄存器的模式
一致.

點評:
這是和DOS下DEBUG.EXE的用法一樣的命令.一般改程序
時用A命令寫入再用CODE ON(見稍后)命令看代碼
錄原來的代碼和改過的代碼后再用工具軟件如PCTOOLS
HACKVIEW之類查找修改.


命令: ADDR
作用: 在SoftICE中顯示或是切換內存區域
語法: ADDR [內存區域句柄|過程名]
用法:
用來察看某一個任務的私有內存區域 或是加參數[內
存區域句柄|過程名]在SoftICE中切換某一任務的私有
內存區域為當前可尋址的內存區域.

一些參數的顯示:
.HANDLE 內存區域控制塊的地址
.PGTPTR 每個任務私有頁表的起址
.TABLES 每個私有頁表中的表項數目
.MINADDR 每個任務的線性地址的起址
.MAXADDR 每個任務的線性地址的終址
.MUTEX VMM用于頁表管理的句柄
.OWNER 使用這塊內存區域的實例的名字

如果有多個相同名字的實例運行 ADDR帶OWNER名字切
換的話切到表中的第一個有此NAME的實例所占的內存
區域.所以帶HANDLE切換的話比較精確. 當用ADDR加參
數后可以用上面提到過的"."命令來回到SoftICE彈出
時所屬的任務內存區域.

點評:
這個牽涉到CPU的保護模式尋址方式和WINDOWS 的內存
管理由分段機構產生的32位線性地址要經過分頁機構
再轉化為物理地址這要牽涉到兩個表的尋址.WINDOWS
每次切換都將每個任務的私有頁表拷貝到CR3寄存器所
指的當前頁表中.而ADDR所作的和WINDOWS所作的一樣.
所以當你在一個任務中彈出時可以通過ADDR可以來看
別的任務的私有內存區域.


命令: ALTKEY
作用: 改變用來呼叫SoftICE的熱鍵
語法: ALTKEY [ALT 字母 | CTRL 字母]
用法:
SoftICE默認的熱鍵為CTRL+D 用此命令可以將熱鍵改
變如果每次啟動機器都要改 則可以把這條命令放入
WINICE.DAT中.
這條命令是為了防止某些程序和SoftICE的熱鍵相沖突
而設的.如:ALTKEY CTRL S 將熱鍵改為CTRL+S

點評: 無.

命令: ALTSCR
作用: 切換SoftICE的視屏輸出.
語法: ALTSCR [ON|OFF]
用法:
如果你有雙顯示器 則這條命令將使SoftICE的窗口顯
示在另一臺單顯上.注意是老式的單顯不是VGA單顯.
實際上在啟動WINICE時可用參數/M強迫SoftICE用單顯
來顯示.也可在WINICE.DAT中加入初始化串.在WIN95中
用SoftICE自帶的VIDEOSETUP可以很方便地設定.
例:ALTSCR ON 將使輸出改變到單顯上.

點評:
這條命令將使SoftICE同一些老顯卡兼容 也使調試變
得方便試想一臺顯示器顯示正常的圖像 另一臺來顯
示跟蹤屏幕免去了按F4看原畫面的步驟 在某些場合
還是用得上的. 以前的WDEB386調試器就非要雙視器
才能工作.而SoftICE只要一臺顯示器就行了這是個很
大的進步但為了和老傳統兼容 它也提供了這個命令
方便用戶.


命令: ANSWER
作用: 自動控通訊端口及將輸出轉移到MODEM
語法: ANSWER [on [com-port] [baud-rate] [i=init] | off]
用法:
此命令可以使SoftICE監控通訊端口 并將輸出改變到
一臺遠程的PC機上 此遠程PC機必須運行 SERIAL.EXE
(或SERIAL32.EXE).當SoftICE檢測到遠程PC上SERIAL.
EXE發來的特定信息 就彈出 告訴你現在將連上遠程
PC然后再退出窗口聯接完成.

一些參數:
.COM-PORT 串行通訊口默認為COM1
.BAUD-RATE 1200 2400 4800 96001920023040
288003840057000115000
其中38400為默認波特率.
.I=INIT MODEM的初始化字符串.

點評: 無沒有用過不知道:-(

命令: BC
作用: 清除一個或多個斷點
語法: BC list | *
用法: 清除斷點后用BL命令就看不到斷點列表 且被清除的
斷點不再起作用.
參數:
list: 可以是將要清除的一系列斷點中間用空格或逗
號隔開.
* : 清除所有的斷點.

點評: BC==Breakpoint Clearing

命令: BD
作用: 使一個或多個斷點失效
語法: BD list | *
用法:
使某個斷點失效不同與 BC 命令的清除暫時失效的斷
點可以用 BE 命令來恢復.而 BC 命令是徹底清除.
參數:
list: 可以是單個也可以是一系列斷點 中間用空格
或逗號隔開.
* : 禁止所有的斷點.

點評: BD==Breakpoint Disablling

命令: BE
作用: 使一個或多個斷點恢復有效
語法: BE list | *
用法:
用來恢復前次用 BD 命令使之失效的斷點. (每當新定
義斷點或編輯斷點時系統自動將其置為有效)
參數:
list: 可以是單個也可以是一系列斷點 中間用空格
或逗號隔開.
* : 恢復所有的斷點.

點評: BE==Breakpoint enablling

命令: BH
作用: 在SoftICE歷史數據庫中顯示或是選擇曾經設過的斷點
語法: BH
用法:
用BH命令后SoftICE將顯示一個表每一行是一個斷點
都是以前使用者曾經下過的斷點 這時可以用上下光
標鍵來定位用INSERT鍵選擇再用ENTER鍵來確定. 用
ESC鍵取消.SoftICE只記錄最近的32個斷點. 而且只在
WIN95正常退出后記錄(記錄到WINICE.BRK中) 這樣就
有一個問題.如果你在MSDOS.SYS配置中是BootGUI=1的
話(即最正常的啟動方式)當你SHUT DOWN機器時控制
并不回到SoftICE手中就無法記錄剛才的斷點.這時只
有改為BootGUI=0.

點評:
注意:SoftICE只在SHUT DOWN時記錄如果你用"重新啟
動并切換..."那是不行的.至少在我的V3.20是不行的
.而且如果你"重新啟動并切換..." 再用EXIT命令想
退回到WIN95很容易出現VxD聯接錯.因為這樣 WINICE
并沒有完全退出內存用 MEM.EXE可以看到這點.所以
SoftICE的使用者最好在MSDOS.SYS中將上面所說的Boo
-tGUI置為0.如果怕這樣用多重配置的話還要每次開機
敲一個WIN可以在AUTOEXEC.BAT中改動加入WIN.COM.
(可不要在WINICE.EXE后再加WIN.COM!畫蛇添足!)
若用SoftICE次數不多的話 可以每次啟動WINDOWS后
再重新啟動并切換到MS-DOS方式再打WINICE.EXE 這
樣也可以的. BH的好處是可以省去紙筆 下次重調試
這個程序時不用再挖空心思想斷點了.


命令: BL
作用: 顯示當前所設的斷點
語法: BL
用法:
BL 命令顯示當前所有斷點的序號 (這個序號被BC BE
BD 等命令所用)類型是否被禁止等信息.如果是被禁
止的斷點會在序號后跟一個"*"號.比如用上面提到的
BD 命令會產生這種效果)

點評: BL==Breakpoint listing

命令: BMSG
作用: 在WIN95的消息上下斷點
語法: BMSG window-handle [L] [begin-msg [end-msg ]]
[IF expression][DO "command1;command2;..."]
用法:
window-handle: 消息發向的窗口句柄
begin-msg : 消息標識字的范圍如果沒有end-msg
那么只在begin-msg上下斷點 否則
在區域內所有消息都會被下斷點
end-msg : 見上.
IF-expression: 表達式的值為真時SoftICE才彈出.
DO "command1;command2;...":
當到達斷點時執行的一系列SoftICE
命令.
L : 表示不彈出SoftICE而是在命令窗口
中記錄WIN95消息.

上面只有窗口句柄是必需的其他都是可選項. 如果沒
有指定在哪個MSG上下斷點 那么所有發向該窗口的消
息都會被攔截.窗口句柄可以用HWND命令來觀看MSG標
識符可以用 WMSG 命令來察看可以是16進制的數 也
可以用習慣的書寫方式如:WM_CREATE.SoftICE彈出后
會停在處理該消息的過程的第一句代碼上.

點評:
BMSG=(set)Breakpoint on MeSsaGe
WINDOWS本身是由消息驅動的 所以跟蹤一個消息會得
到相當底層的答案我主頁上一篇"修改RICHWIN4.3"的
文章就是一個例子.


命令: BPE
作用: 編輯一個已存在的斷點.
語法: BPE index_number
用法:
index_number: 斷點的序號用 BL 命令可以看到.
用BPE命令可以很方便地修改一個已經存在的斷點 但
要注意一點: BPE 在執行時會先將你所要修改的斷點
清除然后再將改過的使能如果你在修改時按ESC鍵退
出修改那么原先的斷點也就不存在了 修改錯誤的結
果也是一樣的.原先的斷點消失.

點評: 參見后面的 BPT 命令.

命令: BPINT
作用: 在某個中斷向量上下斷點
語法: BPINT int-number [IF expression]
[DO "command1;command2;..."]
用法:
int-number : 中斷向量號從0到FFH
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出
Do command : 當SICE彈出時自動執行的一些命令.
當在硬中斷和CPU異常出錯的向量上下斷點時SoftICE
會在處理這個中斷的過程的第一條語句時彈出.而軟件
中斷則停在INT XX處.注意:BPINT只對由中斷描述符表
中的中斷起作用(WIN95).如果在一個DOS虛擬機(DOS窗
口)中下此種斷點 控制是由保護模式轉到虛擬機的中
斷向量表中去.這時如果說停在INT XXH 處 你用F8跟
下去是一下子看不到對這個中斷的實模式處理過程的
要走很遠這時可用:G @ $ 0:int-number*4 來一下
子走到實模式處的處理過程.

點評:
注意! SoftICE30的命令手冊(英文版PDF格式在此處寫
錯了!把$寫成&了!)($意思是告訴SoftICE 后跟實模式
的段.以后有專門論及這些符號的文章.) 如果你是在
DOS窗口中用命令行調一個東西 這時 G @ 0:intno*4
也可以這時默認的SELECTOR就是實模式選擇符存在.
但如果在EXPLORER中直接雙擊一個程序 拿INT 21H來
說一開頭是在KERNEL中就非得用 $ 不行了!另外:由
于有了IF 子句可以很方便地下各種INT XX斷點比如
在文件打開中斷功能上下斷點 bpint 21 if ah==3d


命令: BPIO
作用: 在輸入輸出端口上下斷點
語法: BPIO [-h] port [verb] [IF expression]
[DO "command1;command2;..."]
用法:
port : 端口號
verb : 進行什么樣的操作時彈出R為讀;W為
寫 ;RW為讀寫
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出
Do command : 當SICE彈出時自動執行的一些命令.
-h : 用硬件除錯寄存器在VxD中下斷點只
在PENTIUM級的芯片上才行
當SoftICE彈出時CS:EIP停在執行I/O操作的下一條指
令處.如果不帶參數 verb默認為RW.注意:在WIN95中
若不帶-h參數則只能在RING 3中下斷 若要跟 VXD和
VMM的I/O操作請加-h.
WIN95本身用VXD掛了很多I/O操作用TSS可以看到

點評: 可以參看后面要講的TSS命令.

命令: BPM
作用: 在內存單元上下斷點
語法: BPM[size] address [verb] [debug-reg] [IF expression]
[DO "command1;command2;..."]
用法:
size : 內存單元大小B 為字節(默認);W 為
字;D 為雙字.
verb : 所進行的操作R 為讀;W為寫;RW為讀
寫(默認); X 為執行.
debug-reg : 除錯寄存器DR0DR1DR2DR3.
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出.
Do command : 當SICE彈出時自動執行的一些命令.
當verb 為 RWRW時一旦彈出SoftICE停在剛才發生
內存操作的后一條指令處.為 X 時停在將要執行的指
令處.一般沒有必要不要帶 debug-reg 參數SoftICE
一開始是自動帶DR3的以后按順序為210 只有當你
調試一個DEBUGGER時而此DEBUGGER也用到了DRx才需
特別指定一個防止沖突.
BPM斷點如果下在(400000-7FFFFFFF)內那么只有你下
斷點時當前的可尋址區域( 見ADDR的點評)被激活才能
發生中斷.別的不行.但如果斷點下在DLL中這個DLL在
多個地址區域內都存在那么在這多個地址區域內都可
能發生中斷簡單的例子如KERNEL32.DLL另外size 參
數要緊跟BPM寫成BPMDBPMW之類.

點評: BPM用了DR3-DR0寄存器所以最多只能設四個斷點.

命令: BPR
作用: 在一個內存范圍上下斷點
語法: BPR start-address end-address [verb] [IF expression]
[DO "command1;command2;..."]
用法:
start-address: 起始地址
end-address : 終止地址
verb : R 讀;W 寫;RW 讀寫;T 回溯跟蹤指令
;TW 回溯跟蹤內存寫
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出
Do command : 當SICE彈出時自動執行的一些命令.
BPR 用來在一段內存區域上下斷點它沒有 X 參數 但
可用 R 參數代替. TTW是記錄回溯跟蹤的參數 具體
可見TRACE命令.BPR 有時會極大地降低系統效能因為
所有對斷點所在頁的內存操作都會被SoftICE截獲分析
.如果程序中用到頻繁的內存操作機器就會相當慢.
當條件滿足SoftICE彈出時CS:EIP停在發生內存操作
的那條指令上. BPR 斷點是下在當前被激活的頁表上
如果你下的RANGE在物理4MB以下斷點就會在各虛擬機
中這樣BPR就對LDTGDTIDTs頁表本身不起作用.
另外VMM中0級堆棧和嚴重(?)內存區域(critical ar-
eas)也不允許下BPR很有可能死機.在95中BPR只能用
于RING 3所以對RING 0的VXD無用.(v3.20)

點評:
BPR 有時真的很慢機器就象死了一樣 原因上面都說
了.所以在知道內存單元的時侯最好用BPM只有無路可
走才用BPR的范圍來試試.(當然也有非要用BPR 不可的
地方)


命令: BPRW
作用: 在某個WINDOWS程序或代碼段所在的內存區域上下范圍斷點
語法: BPRW module-name | selector [verb] [IF expression]
[DO "command1;command2;..."]
用法:
module-name : WINDOWS程序的模塊名
selector : 選擇符
verb : R 讀;W 寫;RW 讀寫;T 回溯跟蹤指令
;TW 回溯跟蹤內存寫
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出
Do command : 當SICE彈出時自動執行的一些命令.

BPRW是個在WIN程序的一個或多個可執行模塊上下斷點
的比較便捷的方法實際上它就是BPR 不信你可以下一
個再用BL 看看.它只不過比BPR更有目的性.用HEAP命
令可以幫助使用者看module-name和selector.BPRW 不
用你再費心找范圍.BPRW 在回溯跟蹤時很有用.
另外BPRW 也是不能用于RING 0. 而且在跟 T 參數或
和CSIP命令配合使用時有可能會很慢.RW參數是缺省值

點評:
BPRW 有時侯很管用的 因為你有可能不知道某個程序
在何時在內存中參與運行用BPRW就可以在這個程序一
運行時就彈出.而且可以分不同的代碼段.


命令: BPT
作用: 以前次的斷點為模板設定新的斷點.
語法: BPT breakpoint_index
用法:
breakpoint_index: 斷點序號.(用BL可以看到)
BPT 是以前次的斷點為藍本進行修改成為新的斷點.
它為使用者定新的斷點提供了方便.


點評: 參見第二部分的BPE 命令

命令: BPX
作用: 在可執行語句上設定(或清除)斷點
語法: BPX [address] [IF expression] [DO "command1;command2;..."]
用法:
address : 斷點所在的線性地址
IF expression: 條件表達式只有條件為"真"時Sof-
tICE才在斷點處彈出.
Do command : 當SICE彈出時自動執行的一些命令.

BPX 用來在指令處下斷點程序一旦執行到此SoftICE
就會彈出.當光標在代碼窗口中時直接打入BPX就會在
光標所在語句處設斷點再打BPX 就取消. 當光標不在
代碼窗口中時BPX 必須跟參數(地址). 地址為標準的
"選擇符:偏移"如果只輸入偏移當前的CS值默認為選
擇符.
BPX 實際上是在你下的斷點處加一個INT 3指令 到這
條指令時就彈出來.這使得可以在一個程序中下多個斷
點而不必要使用少得可憐的寄存器.但當你在ROM中設
斷點時SoftICE自動用斷點寄存器來設斷.你也可以用
BPM 命令的X參數來強迫SoftICE用斷點寄存器(DRx)來
設斷.
BPX 也可用16位代碼的模塊名來作地址參數 這樣模
塊中每個出口函數都被設了斷點. BPX 最多設256個斷
點.(V3.20) BPX 有個快捷鍵 F9當光標在代碼窗口中
時按F9就是設定(取消).

點評: BPX 可能是用得最多的斷點了. 有些ANTI-DEBUGGER的
程序就利用INT 3 來作文章看了上面的東西我想你可
以閃過了吧!(不包括用DRx做文章的噢!)


命令: BSTAT
作用: 顯示某個斷點的狀態
語法: BSTAT [breakpoint-index]
用法:
breakpoint-index :斷點的序號用BL 命令可以看到
用BSTAT 來顯示某個斷點的狀態各種統計參數.
BP # : 斷點的序號.若前面有 "*" 表示斷點被禁止
在Total 欄目中:
Hits : SoftICE每經過一次斷點計數+1
Breaks: 在IF expression子句為真的情況下SoftICE
就會產生動作要么彈出要么記錄在內存中
不管怎樣計數+1
Popups: 在Breaks中SoftICE彈出的次數
Logged: 在Breaks中SICE將情況記錄到內存中的次數
Misses: 在IF expression子句為False的情況下SICE
雖然經過這個斷點但沒有彈出行動的次數
Errors: 由于IF 子句中內存變量的問題或其他原因產
生的錯誤的次數.比如跟一個C寫的程序用變
量"IF mysymbol==1"來設斷而在斷點處 my-
symbol 這個變量所在的內存由于釋放或其他
操作而無法訪問就會產生Error.
在Current 欄目中:
Hits : 當前的在IF子句計算為True的情況下但由于
BPCOUNT宏所定的次數未到而記錄下的累計數
Misses: 當前在IF子句計算為False的情況下 且(或)
BPCOUNT宏所定的次數未到而記錄下的累計數
在雜項(misc)欄目中:
Status: SoftICE內部對最近一次斷點進行計算的狀態
代碼.(錯誤代碼)如果為0 的話表示沒有錯.
Scode : SoftICE最近一個內部狀態代碼如果為0的話
表示沒有Errors.
Cond. : 如果斷點帶有附加判斷(即有IF expression)
則為Yes否則為No
Action: 如果斷點帶有附加的動作(即有DO command)
則為Yes否則為No


命令: C
作用: 比較內存中兩塊區域的內容
語法: C start-address l length start-address-2
用法:
start-address : 第一塊內存區域的開始地址
length : 字節長度
start-address-2: 第二塊內存區域的開始地址
如果比較結果不同將顯示不同的部分和它們的地址

點評: 無

命令: CLASS
作用: 顯示WINDOWS的類的信息
語法: CLASS [-x][task-name]
用法:
task-name: 當前的正在機器中運行的16或32位任務名
-x : 顯示CLASS(類)的完整結構.
Windows 95在一個16位的模塊中維護著標準的WINDOWS
類.而且它為每個進程分別維護著除標準類以外的類.
每當程序注冊一個新的WINDOWS類時 信息被放入以下
兩個地方中的一個:

1.任務全局列表放該進程所有模塊都可以存取的類(用
CS_GLOBAL風格)
2.任務私有列表放只有申請該類的模塊才能存取的類.

當任何一個進程想做一個WINDOWS標準類的話如LIST-
BOX它會在任務特定的系統冗余列表中得到一個拷貝
這樣就不會影響到WINDOWS本身. 所以當用CLASS命令
時可以看到以下3個分類:(用虛線隔開)

.任務私有列表
.任務全局列表
.系統冗余列表

輸出的各項參數:
Class Handle : 類句柄.
Class Name : 類的名字 如果注冊時沒有名字
那么顯示原子名
Owner : 注冊此類的模塊
Window Procedure: 處理該類的過程
Style : 類的風格

點評: 無

命令: CLS
作用: 清除命令窗口中的字符
語法: CLS
用法:
CLS 清屏命令將清除命令窗口中顯示的數據 并定位
光標到命令窗口的左上角. (如果光標原先就在命令窗
口中的話)

點評: 無

命令: CODE
作用: 顯示指令碼
語法: CODE [ON | OFF]
用法:
CODE ON 將顯示指令的機器碼
CODE OFF 將不顯示指令的機器碼
CODE 不帶參數將顯示當前是ON 還是 OFF

點評:
非常有用的由于安裝SoftICE時默認為CODE OFF所以
有必要打開看到了機器碼就可以記錄下來以便修改.


命令: COLOR
作用: 顯示或修改屏幕顏色
語法: COLOR [normal bold reverse help line]
用法:
normal : 普通字符的前/背景顏色默認為07h(灰/黑)
bold : 粗體字符的前/背景顏色默認為0Fh(白/黑)
reverse: 反象顯示的字符的前/背景顏色 默認為71h
(藍/灰)
help : HELP命令提示條的前/背景顏色 默認為30h
(黑/青)
line : SoftICE各個窗口分界線的前/背景顏色 默
認為02(綠/黑)
這些參數采用CGA的標準格式即0-3位為前景色4-6位
為背景色這樣就有16種前景色8種背景色:
0 黑; 1 藍; 2 綠; 3 青; 4 紅; 5 品紅;
6 棕; 7 灰; 8 深灰; 9 淺藍; A 淺綠;
B 淡青; C 淺紅; D 淡品紅; E 黃; F 白

點評: 默認的顏色已經很好了不要改得亂七八糟噢!

命令: CPU
作用: 顯示寄存器內容
語法: CPU [-i]
用法:
CPU 命令顯示所有的CPU 寄存器的內容.
(普通控制除錯段)

點評: 不用再裝其他檢測CPU的小軟件了:)

命令: CSIP (16位程序才有用)
作用: 為所有斷點設定一個界限(CS:EIP在其內)(16位程序)
語法: CSIP [off | [not] start-address end-address | Windows-module-name]
用法:
off : 關閉CS:EIP的界限檢查
not : 在所定義的模塊之外的區域斷
點才有效
start-address : 內存區域起始地址
end-address : 內存區域結束地址
Window-module-name : 用 WINDOWS模塊所在區域來代
替地址界限.
CSIP 不帶參數將顯示當前狀態.

對于32位程序這個命令沒有用.請用帶IF 參數的斷點
命令代替.當然WIN95下也有一些老的16位程序(16位模
塊這時CSIP就能派上用場.


命令: DATA
作用: 顯示另一個數據窗口
語法: DATA [window-number]
用法:
window-number: 所要選擇的窗口號0123
SoftICE最多支持4個數據窗口.每一個窗口可以獨立按
自己的格式顯示數據. 但同一時刻只能顯示一個窗口.
如果用DATA窗口不帶任何參數 將按0123的次序顯
示各個窗口中的內容.在數據窗口的右上角的橫線上有
窗口序號的提示.

點評: 可以很方便地對多個目標的進行觀察

命令: DEX
作用: 在數據窗口中顯示(或賦予)某個表達式
語法: DEX [data-window-number [expression]]
用法:
data-window-number: 即DATA命令中所講的0123號
數據窗口
DEX 命令可以為每一個數據窗口賦予一個表達式每次
SoftICE彈出該表達式就被重新計算 并顯示在相應的
數據窗口中.這對某些指針非常有用. 指針可以放在寄
存器中或是在內存變量中如下二例:

DEX 0 SS:ESP 每次SoftICE彈出 就在0號數據窗口中
顯示堆棧的值
DEX 1 @pointervariable 每次SoftICE彈出 就在1號
窗口中顯示由pointervariable指針所指的內存單元的
內容.(@ 操作符后有論述).

用DEX不帶參數將顯示當前在各個數據窗口中所賦予的
表達式. 用 DEX data-window-number(不跟表達式)將
取消前次賦予窗口的表達式.

點評: 相當于自動化的D命令.

命令: DIAL
作用: 將控制臺重定向到MODEM
語法: DIAL [on [ com-port] [ baud-rate] [i=init-string] [p=number] | off]
用法: COM-PORT : 串行通訊口默認為COM1
BAUD-RATE: 120024004800 9600 19200 23040
2880038400(默認)57000115000
I=INIT : MODEM的初始化字符串.
p=number : 電話號碼
DIAL 命令通過撥號與遠程電腦取得聯系 遠程電腦
需正在運行SERIAL.EXE且在等待對方撥號.一旦聯接完
成SoftICE的的輸入將來自遠程計算機輸出也重定向
到遠程計算機.本地計算機除了激活的熱鍵外不接收其
他對SoftICE的輸入.當遠程機結束調試后用DIAL OFF
來掛斷MODEM.

點評:
前次的ANSWER命令是等遠程機撥號過來而DIAL是撥過
去.有機會試一下這兩個命令就好了.


命令: E
作用: 修改內存單元
語法: E[size] [address [data-list]]
用法:
size : B 字節;W 字;D 雙字;S 短實型;L 長實型
;T 10字節的實型
data-list: 要修改的值(和size類型一致) 可用單引
號或雙引號來輸入字符串.
如果鍵入沒有data-list參數的E 命令 光標將切換到
數據窗口并定位到所指定的內存單元等待使用者相應
的操作.如果加跟data-list參數則內存單元立刻被修
改為所指定的值.數據窗口當前如果不可見 則鍵入E
命令將使之可見.在修改中可以用TAB鍵在ASCII與十六
進制方式之間切換.

點評: 無

命令: EC
作用: 進入或退出代碼窗口
語法: EC
用法:
EC 命令使得光標在代碼窗口和命令窗口之間切換. 如
代碼窗口當前不可見則鍵入 EC 命令后將自動可見
當光標在代碼窗口中時使用者可以利用 SoftICE的幾
項快捷功能:
1.可以在光標處設斷點直接打BPX不跟地址更方便的
是按F9快捷鍵再執行一遍將清除當前所在的斷點
2.可以用HERE 命令來設個臨時斷點 所謂臨時斷點好
象DEBUG中的G命令也可用F7快捷鍵來實現.
3.在代碼窗口中時也可用上下光標鍵PageUpPageDn
來翻頁上下瀏覽.
另外當用戶調試源文件時可以用:
Ctrl+Home 到源程序的第一行
Ctrl+End 到源程序的最后一行
Ctrl+左右光標 水平察看源程序

點評: 實際上可以用Ctrl+光標Ctrl+PgUpCtrl+PgDn來直接翻頁

命令: EXIT
作用: 強行退出DOS程序或WINDOWS程序
語法: EXIT
用法:
這個命令在PDF手冊中說95已經不被支持 實際上還是
有用的. 特別是當開個DOS VM跑時用EXIT退出還是偶
爾會用到.EXIT實際上是強行執行一個INT 21h AH==4C
所以在DOS VM和保護模式的ring3還是有可能正常退出.
只是有可能而已.

點評: 在WIN95(Protected)下除非你很肯定 否則不要用EXIT.
一不小心你的機器將會死得很難看!


命令: EXP
作用: 顯示DLL中的出口函數
語法: EXP [[module!][partial-name]] | [!]
用法:
module! : 對所指定的模塊列出出口函數(注意要
加 ! 驚嘆號)
partial-name: 指定出口函數的前幾個字符 可以用?
來做替代不定字符. (注意要跟緊前面
的module!)
! : 只跟! 表示列出SoftICE當前已加載出
口函數表的模塊.
WIN95中SoftICE自動加載KERNELUSERGDI的出口函數
表.你也可以通過WINICE.DAT或SoftICE 的LOADER (加
載器)來加載更多的出口函數列表.

點評:
比較常用的DLLsDRVs都在WINICE.DAT中有了 用戶只
要修改為相應的路徑就能每次開機自動帶入.這樣帶來
的好處是:
1.可以在反匯編時直接看到調用接口.
2.可以直接在函數上下斷點


命令: F
作用: 填充某一塊內存區域
語法: F address l length data-list
用法:
length : 字節長度
data-list: 所要填的數據. 可以是用單引號或雙引號
括起來的字符串
執行F 命令將向所指定的內存區域填充length 長度的
數據如果數據不夠長度將重復數據直到達到長度為
止.

點評: 無

命令: FAULTS
作用: 打開或關閉錯誤跟蹤功能
語法: FAULTS [on | off]
用法:
FAULTS 命令將打開或關閉SoftICE的錯誤跟蹤功能.
不加參數將顯示當前的開關狀態.

點評:
由于SoftICE做為一個DEBUGGERFAULTS 默認為ON 所
以一旦CPU有非法指令SoftICE就會不停地彈出 讓你
知道錯在哪里實際在工作中這樣的情況如果太頻繁地
發生最好將其置為OFF.我一般將其置為ON 當發生非
法指令時再手工置為OFF.你也可以在WINICE.DAT 中一
開始就置其為OFF. 初學者一般不知道有這個命令 一
旦發生非法指令除了按R鍵只有傻站著;)


命令: FILE
作用: 顯示或切換當前源文件
語法: FILE [[*]file-name]
用法:
FILE 命令常用來輔助在源文件中沒有符號表的地方下
斷點. 用FILE命令將所需的源文件顯示在代碼窗口中
用SS 命令查找一下再用BPX或F9來下斷點.
如果加文件名參數則所選的文件變成當前文件 并被
顯示在代碼窗口中. 如果沒有文件名參數則顯示當前
的源文件(如果當前有的話).如果加 * 則列出當前符
號表中所有源文件. 在WIN95中用FILE 加文件名同時
也切換內存地址內容.

點評:
一般用于高級編程工具的輔助調試如C語言等.不過這
編程工具已經內置DEBUGGER所以就看個人習慣了.


命令: FKEY
作用: 顯示或修改當前快捷鍵定義
語法: FKEY [function-key string]
用法:
function-key: 快捷鍵:
F1 - F12 :
SF1 - SF12 : Shift鍵加F1 - F12
CF1 - CF12 : Ctrl鍵加F1 - F12
AF1 - AF12 : Alt鍵加F1 - F12
string : 一個或多個SoftICE的命令.
命令前加 ^ 表示在按快捷鍵時不顯示
相應的命令內容.命令后加;代表回車.
FKEY 后只跟function-key而不跟string將取消該快
捷定義.除了用FKEY命令可以定義快捷鍵外用SoftICE
的LOADER也能做到這一點
默認快捷鍵清單:
F1=h; F2=^wr;
F3=^src; F4=^rs;
F5=^x; F6=^ec;
F7=^here; F8=^t;
F9=^bpx; F10=^p;
F11=^G @SS:ESP; F12=^p ret;
SF3=^format; CF8=^XT;
CF9=TRACE OFF; CF10=^XP;
CF11=SHOW B; CF12=TRACE B;
AF1=^wr; AF2=^wd;
AF3=^wc; AF4=^ww;
AF5=CLS; AF8=^XT R;
AF11=^dd dataaddr->0;
AF12=^dd dataaddr->4;
CF1=altscr off; lines 60; wc 32; wd 8;
CF2=^wr;^wd;^wc;

點評: 無

命令: FLASH
作用: 在 P 和 T 命令執行過程中刷新Windows 屏幕
語法: FLASH [on | off]
用法:
如果將FLASH 置為 ON 則在執行T或P命令時SoftICE
將刷新一下Windows 屏幕這在調試一個直接對顯存操
作的程序時特別有用.在一般情況下當用 P 命令跨過
一個CALL 時而此 CALL 又調用顯示驅動程序時Sof-
tICE才重新刷新屏幕.
FLASH 命令不帶參數將顯示當前狀態.默認FLASH OFF.

點評: 無

命令: FORMAT
作用: 改變數據窗口的顯示格式
語法: FORMAT
用法:
FORMAT 命令用來改變數據窗口的顯示格式.
SoftICE有快捷鍵 Shift-F3 來代替FORMAT.
顯示格式將按 字節字雙字短實型長實
型10字節實型循環.

點評: 參見 D DATA 命令.

命令: G
作用: 執行到某一地址
語法: G [=start-address] [break-address]
用法:
=start-address: 開始地址
break-address : 中斷地址
G 命令不帶參數將從SoftICE中返回.如果帶參數break-
address則SoftICE將在所指定的地址處下一個一次性
斷點; 如果帶=start-addressSoftICE 將從指定的地
址處開始執行否則從當前CS:EIP處執行. 程序中其他
的斷點(非G命令下的斷點)照樣起作用. 無論是誰先彈
出都將清除G 命令所下的一次性斷點.
G 命令不帶參數類似于 X 命令.
G 命令在Windows95中使用除錯寄存器 如果除錯寄存
器用完則用INT 3.

點評: 由于G 命令缺省用DRx所以有時可以對付一些在INT 3上作手腳的程序.

命令: GDT
作用: 顯示全局描述符表
語法: GDT [selector]
用法:
selector: 指定GDT選擇器
GDT 命令將顯示全局描述符表的內容.如果加選擇符參
數則只顯示此選擇符所指的描述符.
輸出:GDT 的線性基址和長度將顯示在輸出數據的頂行

輸出數據的每一行內容的說明:
value: 最低兩位即描述符特權級
type : 描述符類型如下:
Code16 : 16位代碼描述符
Data16 : 16位數據描述符
Code32 : 32位代碼描述符
Data32 : 32位數據描述符
LDT : 局部描述符表描述符
TSS32 : 32位任務狀態段描述符
TSS16 : 16位任務狀態段描述符
CallG32: 32位調用門描述符
CallG16: 16位調用門描述符
TaskG32: 32位任務門描述符
TaskG16: 16位任務門描述符
TrapG32: 32位陷肼門描述符
TrapG16: 16位陷肼門描述符
IntG32 : 32位中斷門描述符
IntG16 : 16位中斷門描述符
Reserved: 保留的描述符
base : 描述符中的段基址
limit: 描述符中的段界限
DPL : 描述符特權級0123
present bit: P 或 NP 表示該段是否在內存中
segment attributes: 段特性:
RW: 數據段可讀寫
RO: 數據段只讀
RE: 代碼段可讀可執行
EO: 代碼段只可執行
B: TSS(任務狀態段)忙置位
ED: 數據擴展方式
參見 LDT.

點評:
這段翻譯并不完全用PDF手冊上的.如"selector" 原指
選擇符(器)用來指向描述符表中的描述符 而 PDF中
type 的說明全用到 selector說的意思雖是一樣但和
別的文獻矛盾故認為不妥將其翻譯成descriptor 即
描述符.實際上可以看出一個選擇符指向一個描述符
兩者是一致的.描述符類型實際上也就是指向它的選擇
符類型.


命令: GENINT
作用: 強行產生一個中斷
語法: GENINT [nmi | int1 | int3 | interrupt-number]
用法:
interrupt-number: 對Windows95來說0-5fh
GENINT強行產生一個中斷用于SoftICE和別的DEBUGGER
協作的時侯如:GENINT nmi 將使SoftICE將控制返還給
CodeView For Dos.(對其他DEBUGGER請嘗試0123)
GENINT還用于測試中斷例程.但SoftICE不檢測一個中斷
是否有效它只是摹擬中斷的產生所以當用此命令時要
注意相應的中斷例程是否存在.

點評: 無

命令: H
作用: 顯示幫助信息
語法: H [command]
用法:
鍵入 H 命令不帶任何參數將顯示所有命令的幫助. 要
獲得詳細的幫助在 H 后加命令名就可.詳細的幫助將
包括命令的描述命令的語法和例子.

點評:
H 命令可以很方便地幫助使用者查詢SoftICE的命令.
實際上在命令窗口的底部有一個狀態條它提供的實時
幫助也是很有用的.


命令: HBOOT
作用: 系統重新啟動
語法: HBOOT
用法:
HBOOT 將重新啟動計算機.等同于按 Ctrl+Alt+Del 組
合鍵.HBOOT 一般都能成功只有特殊情況下(某些插卡
需要重加電)才用機器上的RESET或POWER鍵.

點評:
HBOOT 讓我想到兩件事:
1以前學微機時老師老是盯著我們唯恐我們亂啟動
機器.想起來真是不寒而栗 好象是我們的過錯一樣.
可機器明明死了嘛不重新啟動怎么行?
2有大部分品牌機上沒有RESET鍵 死機就按POWER鍵
按得老板倒抽涼氣.:)


命令: HEAP
作用: 顯示Windows全局堆
語法: HEAP -L [free | module-name | selector]
用法:
-L : 只顯示含局部堆的全局堆入口
module-name: 模塊名.
selector : LDT 選擇符

HEAP FREE 將顯示空閑的全局堆.
HEAP 跟模塊名將只顯示由指定的模塊擁有的全局堆入
口. HEAP 跟LDT 選擇符將只顯示與此選擇符相應的全
局堆入口. HEAP 不帶參數將顯示整個全局堆的情況.

輸出:
selector or handle: 選擇符符或句柄.
address : 32位虛擬地址
size : 堆的大小(字節)
module name : 模塊名
--------------------------------
type : 全局堆的類型
code : 不可丟棄的代碼
code D : 可丟棄的代碼
Data : 數據段
ModuleDB : 模塊數據基礎段
TaskDB : 任務數據基礎段
BurgerM : "三明治"(就是堆本身)
Alloc : 被動態分配的內存
Resource : Windows 資源
--------------------------------

額外信息:
如果某全局堆的入口是代碼段或數據
段則會顯示該段在.EXE中的段號.如
果某全局堆的入口是Windows資源則
會附加顯示如下資源類型:
--------------------------------
UserDef(用戶自定義);Icon(圖標);
String(字符串); Accel(快捷鍵);
IconGrp(圖標組);Cursor(光標);
Menu(菜單);FontGrp(字體組);
ErrTable(錯誤表);NameTabl(名字表);
Bitmap(位圖);Dialog(對話框);
Font(字體);CursGrp(光標組)
--------------------------------


點評:
PDF 手冊中稱堆本身為Burger-->"三明治"(碎肉夾餅)
很貼切堆本來就是亂七八遭.


命令: HEAP32
作用: 顯示Windows全局堆
語法: HEAP32 [hheap32 | task-name]
用法:
hheap32 : 由HeapCreate()返回的堆句柄.
task-name: 32位任務的名字.

HEAP32 不帶參數顯示32位進程的堆的情況:
.KERNEL32 缺省系統堆.
.進程用HeapCreate()申請的私有堆.
.兩個由VMM產生的Ring-0級的堆.第一個是換頁鎖定的
堆第二個是可換頁的堆.
.一個屬于所有虛擬機的Ring-0堆.

如果加上進程名SoftICE將顯示所有該進程的缺省堆
且地址內容也切換到該進程中.如果加上堆的基地址而
不是進程名SoftICE將顯示該進程的非缺省堆.

WINDOWS 95的調試版還提供了額外的調試信息想要用
SoftICE看到這些信息必須:
.對于KERNEL32 Ring-0堆必須安裝有SDK除錯版.
.對于VMM Ring-0堆必須安裝VMM的DDK除錯版

輸出信息(HEAP32):
HeapBase : 堆的基址
MaxSize : 堆可增長的最大范圍 在此范圍內堆無需
再創建一個新段.
Committed: 以千字節為單位當前存在于物理內存中的
被保證的內存大小
Segments : 堆中段的數量. 當堆增長超出段所能容納
的范圍就建立一個新段
Type : 堆的類型:
--------------------------------
Private: 由應用程序建立的Ring-3堆
System : KERNEL32建立的Ring-3堆
Ring0 : VMM建立的Ring-0堆
VMM## : 由VMM建立的為特定虛擬機
存儲數據的堆.
--------------------------------

輸出信息(HEAP32 帶參數):
Address: 堆元素的地址.
Size : 以字節為單位堆元素的長度.
Free : 如果堆元素是空閑的塊則會顯示"FREE"否
則不顯示.

點評: 在SoftICEv3.20實際操作上和手冊說的中有些許不同.

命令: HERE
作用: 運行到當前光標所在行
語法: HERE
用法:
HERE 命令讓程序一直走到光標所在行再停下來.注意:
只有當光標在代碼窗口中時才有效.如果代碼窗口不可
見或光標不在代碼窗口中則請用 G 命令代替.也可用
EC 命令將光標移到代碼窗口中去再用 HERE.
HERE 命令有個快捷鍵 F7.將光標定位到你想讓程序暫
停的指令處按下F7 程序將在此處設一個一次性斷點
.程序中其他非一次性的斷點照樣起作用. 無論是誰先
彈出都將清除 HERE 所下的一次性斷點.和G命令一樣
HERE 命令盡量采用除錯寄存器DRx 只有用完時才用
INT 3

點評: 無.

命令: HWND
作用: 顯示窗口句柄的信息
語法: HWND [-x][hwnd | [[level][process-name]]
用法:
level : 窗口等級號碼.0 是最高級.1 其次等
等.窗口等級代表了父窗口和子窗口的
關系.
-x : 顯示窗口的冗余信息.
hwnd : 窗口句柄.
process-name: 任何當前進程名

如果指定了窗口句柄就無需指定等級 進程名等其他
參數SoftICE將顯示所指定窗口句柄的信息.

輸出:
Class Name : 此窗口所屬類的名稱或類的原子.
Window Procedure: 窗口函數.

點評: 窗口句柄很有用的.(廢話!)

命令: I
作用: 從輸入/輸出(I/O)端口讀入數據
語法: I[size] port
用法:
size: B 字節(默認);W 字;D 雙字
port: 端口地址.
I 命令在大多數情況下是作一個I/O輸入指令 獲取真
實的硬件端口的數據. 在虛擬端口的情況下取得真實
值和應用程序所見到的虛擬值可能不同. 對于 21h 和
A1h 端口SoftICE是例外它不進行讀取而是返回So-
ftICE彈出時的值.

點評: 參見 O 命令.

命令: I1HERE
作用: 遇到內嵌的INT 1指令時激活SoftICE
語法: I1HERE [on | off]
用法:
I1HERE 命令使SoftICE在遇到程序中內嵌的INT 1指令
時彈出.I1HERE在調試程序時需在某處暫停時特別有用
.在SoftICE彈出之前 SoftICE會檢查當前是否有一條
INT 1指令在程序中.如果沒有的話SoftICE將不彈出.
在程序要暫停的指令之前加一句INT 1 就能做到這一
點.SoftICE彈出時EIP 會停在INT 1的下一條指令后.
I1HERE 不帶參數將顯示當前I1HERE的狀態.缺省為OFF
I1HERE 在與如BoundsChecker 之類的調試工具分工協
作時很有用因為BoundsChecker用到 INT 3為了防止
沖突應使用INT 1. 另外VMMWindows內存管理的VxD
在Windows出現某些嚴重錯誤時會在嚴重錯誤返回前執
行一個INT 1指令.如果此時I1HERE 為ON時 你就能跟
蹤這類錯誤. 如由VMM因換頁錯誤而產生INT 1 時寄存
器的值如下:
.EAX = 錯誤地址.
.ESI 指向一個ASCII字符串(信息).
.EBP 指向一個CRS(在DDK的VMM.INC中定義的客戶寄
存器結構)

點評:
基礎信息: INT 1 實際上是單步中斷的處理例程. CPU
在檢測到 TP 標志為1時(TP是由DEBUGGER設的) 就自
動進行這一例程. DEBUGGER 們掛接這個中斷例程進行
一些諸如顯示當前寄存器值等操作并等待用戶進一步
的指令. 在程序中直接用 INT 1指令也能達到效果.
SoftICE不象DOS下的DEBUG.EXE一碰到 INT 1 就中斷
缺省是不中斷的只有當I1HERE 為 ON 時才中斷.


命令: I3HERE
作用: 在遇到INT 3 指令時激活SoftICE
語法: I3HERE [on | off]
用法:
I3HERE ON 將使SoftICE每碰到一個 INT 3 時都彈出
這在調試程序時需要在某處暫停特別有用.在你需要暫
停的指令之前加一個INT 3 就行.如果你是編 WINDOWS
程序加個函數 DebugBreak(). 這個函數也執行一個
INT 3.
I3HERE 不帶參數將顯示當前狀態.請參見I1HERE.

點評:
基礎信息: INT 3 是斷點中斷處理例程.也被DEBUGGER
們掛接顯示寄存器值給出一些信息并等待用戶下一
步操作. DEBUGGER在下斷點時將斷點處的指令替換成
INT 3把替換下的指令保存在執行完例程后再恢復原
先保存的指令修改堆棧中的斷點地址 使程序得以繼
續. DOS下的老DEBUG.EXE當遇到程序中的INT 3 指令時
會進行同樣的操作也修改堆棧中的斷點地址所以IP又
停在那條INT 3 上 如果你打入 G 程序將一直停在此
處這時改一下IP就可以了.


命令: IDT
作用: 顯示中斷描述符表
語法: IDT [interrupt-number]
用法:
interrupt-number: 所要顯示的中斷號
IDT 命令讀取中斷描述符表寄存器的值 獲得表基址
然后顯示中斷描述符表的內容.IDT 命令不帶參數將顯
示所有中斷的情況如果帶中斷號 則只顯示相應的入
口. 輸出參數如下:
interrupt number: 0-05fh的中斷號.
interrupt type : 中斷類型如下:

---------------------
CallG32: 32位調用門.
CallG16: 16位調用門.
TaskG: 任務門.
TrapG16: 16位陷肼門.
TrapG32: 32位陷肼門.
IntG32: 32位中斷門.
IntG16: 16位中斷門.
---------------------

address : (選擇符:偏移量)形式的地址.
selector's DPL : 選擇符的描述符特權級0123
present bit : P 或 NP 表示該描述符是否在內
存中.
Owner+Offset : 符號名或擁有者名和在它們中的
偏移.

點評: 參見GDTLDT.

命令: LDT
作用: 顯示局部描述符表
語法: LDT [selector]
用法:
selector: 指定LDT 選擇符
LDT 命令將顯示局部描述符表的內容. SoftICE先讀取
局部描述符表寄存器的值再定位描述符表. 如果局部
描述符表不存在會顯示一個錯誤信息. 如果指定選擇
符則只顯示該選擇符所指向的描述符. 如果指定的選
擇符是一個全局選擇符 則SoftICE將自動顯示該全局
選擇符所指的描述符.

輸出:LDT 的線性基址和長度將顯示在輸出數據的頂行
輸出數據的每一行內容的說明:
value: 最低兩位即描述符特權級
type : 描述符類型如下:
---------------------------
Code16 : 16位代碼描述符
Data16 : 16位數據描述符
Code32 : 32位代碼描述符
Data32 : 32位數據描述符
CallG32: 32位調用門描述符
CallG16: 16位調用門描述符
TaskG32: 32位任務門描述符
TaskG16: 16位任務門描述符
TrapG32: 32位陷肼門描述符
TrapG16: 16位陷肼門描述符
IntG32 : 32位中斷門描述符
IntG16 : 16位中斷門描述符
Reserved: 保留的描述符
---------------------------

base : 描述符中的段基址
limit : 描述符中的段界限
DPL : 描述符特權級0123
present bit: P 或 NP 表示該段是否在內存中
segment attributes: 段特性:
---------------------------
RW: 數據段可讀寫
RO: 數據段只讀
RE: 代碼段可讀可執行
EO: 代碼段只可執行
B : TSS(任務狀態段)忙置位
---------------------------

點評:
這段翻譯并不完全用PDF手冊上的.如"selector" 原指
選擇符(器)用來指向描述符表中的描述符而PDF手冊
中type 的說明全用到 selector. 說的意思雖是一樣
但和別的文獻矛盾故認為不妥將其翻譯成descriptor
即描述符. 實際上可以看出一個選擇符指向一個描述
符兩者是一致的. 描述符類型實際上也就是指向它的
選擇符類型.


命令: LHEAP
作用: 顯示Windows 局部堆
語法: LHEAP [selector | module-name]
用法:
selector : 局部描述符表數據選擇符.
module-name: 16位 模塊名.
LHEAP 顯示Windows程序在全局堆中申請的數據信息.
如果不跟選擇符參數當前的DS 寄存器的內容(數據選
擇符)被做為缺省值. 用前次說過的 HEAP 命令找標有
LH 的選擇符來做為LHEAP的參數.如果用module-name
做參數則SoftICE用此模塊的缺省數據段進行堆遍歷.
輸出:
offset: 16位的偏移量(相對于相應的選擇符基址)
size : 堆入口(每個組成部分)的字節大小.
type : 類型如下:

---------------------
FIX : 固定的.
MOV : 可移動的.
FREE: 空閑的.
---------------------

handle: 相應的句柄.對固定的堆組成部分來說 此值
和offset 相等且是由 LocalAlloc()返回的.
對于可移動的組成部分來說此值將會被做為
LocalLock()的參數.

點評: 無.(天氣好熱!翻譯得好累!)

命令: LINES
作用: 改變SoftICE窗口的顯示行數
語法: LINES [25 | 43 | 50 | 60]
用法:
LINES 命令用來改變SoftICE窗口的顯示行數. 默認為
25行.可以有:
25 行;43 行;50 行;60 行;435060行只適用于VGA卡.
LINES 不帶參數將顯示當前行數.如果用 ALTSCR 命令
切換顯示器輸出到單顯SoftICE自動轉為25行再轉回
VGA卡時要手工用 LINES 命令來恢復原值.

點評:
實際上 我的3.20用的是SoftICE自帶的通用視頻驅動
程序行范圍可以從25一直到128 !!(除非為SoftICE開
的顯存不夠)


命令: LOCALS
作用: 從當前棧中列出局部變量
語法: LOCALS
用法:
輸出:
Stack Offset : 棧偏移.
Type definition: 類型定義.
ValueDataor structure symbol({...})
: 值數據或結構符號.
SoftICE根據局部變量的類型來用不同的形式顯示它們
如果是指針則顯示所指向的數據.如果是結構則顯示
結構符號.如果既不是指針又不是結構則顯示本身值.


命令: M
作用: 傳送數據
語法: M source-address l length dest-address
用法:
source-address: 源數據的起址;
length : 要傳送的字節長度;
dest-address : 目的數據塊的起址.
用 M 命令將數據塊從源地址傳送到目的地址.
如M ds:1000 l 2000 es:5000
將2000h個字節從DS:1000h傳到ES:5000h處.

點評: 無

命令: MACRO
作用: 定義一個宏命令使之執行一系列SoftICE指令.
語法: MACRO [ macro-name] | [*] | [= "macro body"]
用法:
macro-name: 3-8個字符的宏名(不區分大小寫);
macro-body: 用分號隔開的一系列SoftICE指令 首末
加冒號;
* : 刪除一個或所有的已定義的宏命令;
= : 定義(或重定義)一個宏命令.
MACRO 命令用于定義SoftICE指令的超集.macro-body
可以包含SoftICE的指令也可包含宏定義甚至是當前
的宏定義本身.(這當然會產生遞歸調用如果編得不好
的話會產生錯誤也沒有什么大意思).在這一系列命令
之間用分號(;)隔開最后一個命令后不用加分號.
macro-body中還可以帶入命令行參數和DOS命令的%1
%2...一樣合法值在1-8之間.注意一點macro-body首
尾是用冒號的.所以在宏定義體中如果要用到 / " %
時要在前加一 /這跟C語言的寫法是一致的.
macro_name參數用來代表宏名可以是字母或數字或下
劃線組成.可以是現有的宏名 那樣的話就會重定義這
個宏.宏名不可以和現有的SoftICE內部指令相同.會發
生錯誤.MACRO * 表示刪除當前定義的所有(有名字的)
宏.(因為斷點的DO 子句實際上也是宏 不過是無名字
的它們不能就這樣被刪除了!)
MACRO mnames * 刪除當前名為 mnames 的宏.
MACRO mnames 將編輯名為 mnames 的宏 在編輯過程
中可以用ESC鍵取消改動.一個很有用的例子:
:MACRO 1shot = "bpx %1 do /"bc bpindex/""
用這個宏可以設一個一次性斷點非常方便!

點評: 宏病毒!

命令: MAP32
作用: 顯示當前所有32位模塊的內存映象(圖).
語法: MAP32 [module-name | module-handle |address]
用法:
module name : Windows模塊名;
module handle: 模塊的基址;
address : 落在可執行模塊中的地址.
MAP32 不帶參數將顯示所有的32位模塊的信息.加參數
將只顯示指定模塊的信息.
輸出如下:
Owner : 模塊名.
OBJ Name: 可執行文件的區段名.
Obj# : 可執行文件中的區段號.
Address : 選擇符:偏移量 格式的區段地址.
Size : 區段的大小(字節)
Type : 區段類型:
--------------------
CODE 代碼
IDATA 初始化的數據
UDATA 未初始化的數據
RO 只讀
RW 讀/寫
SHARED 對象是共享的.
--------------------

點評: 無.

命令: MAPV86
作用: 顯示當前虛擬機的DOS內存映象
語法: MAPV86 [address]
用法:
address : 段:偏移量格式的地址
MAPV86 不帶參數將顯示當前整個虛擬機的內存映象.
加參數將顯示指定包含所指定地址的內存區域的信息.
有時侯DOS VM的頁沒有切進來所以會有 "PAGE NOT
PRESENT"的出錯信息所以可以再彈出一次.
MAPV86 在配合SYMLOC命令時很有用因為在Windows
啟動前裝載的程序Windows不會自動將它們的符號信
息映射到V86內存用MAPV86命令就可以取得它們的代
碼段將符號表與之對齊就可以跟蹤調試了.

輸出如下:
VM ID : 虛擬機的ID.
VM handle : 32位虛擬機的句柄.
CRS pointer: 虛擬機的32位客戶登記表的指針.(?)
VM address : 32位線性地址.
另外如果SoftICE彈出時CS:IP指向一個MAPV86的入口
那一行的內容將高亮顯示.

點評: 無.

命令: MOD
作用: 顯示Windows模塊列表.
語法: MOD [partial-name]
用法:
partial-name: Windows模塊名(可以是開頭的若干個
字母).
MOD 不帶參數將顯示所有的模塊.若加 partial-name
則符合要求的模塊將被列出.輸出如下:

module handle: 16位的句柄.
base : 線性基址.
pe-header : 選擇符:偏移量格式的PE文件頭.
module name : 模塊名.(編程序時在.DEF中用NAME或
LIBRARY命名的.)
file name : 文件的路徑(全名).

點評: 無.

命令: O
作用: 向I/O端口輸出數據.
語法: O[size] port value
用法:
size : B 字節(缺省值);W 字;D 雙字
port : 端口地址.
value: 要輸出字節字或雙字.
O 命令將立即輸出到硬件端口(當然那兩個21h和A1h要
等退出SoftICE窗口時才執行)(?)


點評:
關于21h和A1端口二者是關系到中斷的 PDF文檔在這
寫得不是很詳細.實際操作情況是多種多樣的.


命令: P
作用: 單步執行程序.
語法: P [ret]
用法:
P 命令將單步執行程序.在匯編模式中當遇到 CALL
INTLOOPREP指令時P將不跟蹤進去直到這些指令執
行完畢控制才返回SoftICE換句話說P命令是"跨"過
這些指令的.P 后加RET 參數SoftICE將一直單步執行
直到它找到一條返回語句(RETRETF).在源程序模式中
P 命令將執行一個源程序表達式. 但也不跟蹤到子例
程中去.P 命令實際上是利用了單步標志 大多數情況
下是如此.但碰到CALLINTLOOPREP指令時就用INT 3
(一次性) 在這些指令的后面設一下.
P 命令有快捷鍵 F10; P RET 命令有快捷鍵 F12.

點評: F10可能是按得最多的鍵了好好保護你的鍵盤吧!

命令: PAGE
作用: 顯示頁表信息
語法: PAGE [address [L length]]
用法:
address : 段:偏移量 或 選擇符:偏移量 格式的地址
length : 要顯示頁的數量.
PAGE 命令用來列出當前頁目錄和各個頁表的情況.(在
Windows NT 中可以實現列出多個頁目錄的情況 這里
就不涉及了) 在x86的體系中 一個頁目錄包含1024個
頁目錄項(每個頁目錄項占4個字節)每個頁目錄項又指
向一個頁表每個頁表包含1024個頁表項 (每個頁表項
也占4個字節)每個頁表項指向一個4KB大小的頁.所以
這樣的體系管理著1024*1024*4=4GB大小的空間.

PAGE 加地址參數將顯示映射到相應地址處的頁表項的
內容包括以下部分:
.由該頁表項映射的頁的線性虛擬地址.
.由該頁表項映射的頁的物理地址.
.該頁表項的各種特性比如是否在內存中存取權限等.
這里的特性是CPU架構時確定的.
.該頁的類型這個是頁表項中的Windows定義位決定的.

PAGE 加地址加L參數將顯示連在一塊的若干個頁表項
但要注意的一點是:PAGE命令在顯示這樣一塊連續頁表
項區域時不會跨過頁表界線. 也就是說顯示出來的頁
表項有可能會少這時再用一個PAGE就可.

PAGE 不加參數將顯示當前頁目錄的內容. 第一行顯示
頁目錄的物理和線性地址.后面的每一行顯示一個頁目
錄項的內容.

輸出:
physical address: 物理地址.如果顯示的是頁目錄(
即PAGE不加參數)這個地址是頁目錄項的物理地址即
相應頁表的地址. 如果顯示的是頁表(即PAGE 加地址
參數) 則這個地址是內存中相應頁的物理地址.

linear address : 線性地址.如果顯示的是頁目錄(
即PAGE不加參數)這個地址是頁目錄項的線性地址即
相應頁表的地址. 如果顯示的是頁表(即PAGE 加地址
參數) 則這個地址是內存中相應頁的線性地址. 如果
加L參數則此地址是第一個頁的線性地址.

attribute :下面是頁目錄項或頁表項的屬性:
---------------------
P 在內存中
NP 不在內存中
D 又臟又快的DOS!
A 存取位

U 用戶屬性
S 管理員屬性
R 只讀
---------------------

type :每個頁表項在架構中都留有一個
3bit的OS字段被操作系統利用
Windows就定義如下的類型:
---------------------
System Private
Instance Relock
VM Hooked
---------------------
系統 私有
實例 重鎖
虛擬機 鉤子
---------------------

點評: 無

命令: PAUSE
作用: 滿屏后是否暫停顯示
語法: PAUSE [ON | OFF]
用法:
PAUSE 命令將控制是否在SoftICE命令顯示輸出到達滿
屏后暫停.默認PAUSE 為ON即在滿屏時暫停. PAUSE命
令不加參數將顯示當前狀態.

點評: 也可用SET PAUSE [ON|OFF]

命令: PCI
作用: 顯示系統中每個PCI設備的情況.
語法: PCI
用法:
PCI 命令顯示系統中每個PCI設備的配置寄存器內容.
不要在非PCI的系統上使用這個命令. 大多數輸出的內
容都一目了然少數的沒有說明可以參考PCI詳細的說
明書.

點評: 我倒是用它來看顯卡的制造商.

命令: PEEK
作用: 從物理內存中讀數據
語法: PEEK[size] address
用法:
size : B 字節(默認值);W 字;D 雙字;
address: 物理內存地址.

PEEK 命令顯示從指定物理內存中來的指定大小的數據
PEEK 命令在讀取內存映象的I/O 寄存器的值時很有用.

點評: 參見POKE

命令: PHYS
作用: 顯示某個物理地址對應的所有虛擬地址.
語法: PHYS physical-address
用法:
physical-address: 物理地址 是由x86的分頁機構轉
換來的.這個物理地址是傳到計算機的總線上的地址.
而且在操作內存映象的硬件設備時(如顯存 )顯得特別
重要.
Windows用x86體系的虛擬尋址方式在虛擬地址(被程序
用到)和物理地址(被硬件設備用到)之間建起一座橋梁.
在很多情況下一段物理地址可能出現在多個頁表項中
所以就存在一個物理地址對多個虛擬地址.
SoftICE在表達式中不接受物理地址所以應用PHYS 命
令來進行轉換.

點評: 無.

命令: POKE
作用: 向物理內存寫數據.
語法: POKE[size] address value
用法:
size : B 字節(缺省值);W 字;D 雙字
address: 物理內存地址;
value : 要輸出字節字或雙字.
POKE 命令將往指定的物理內存地址處寫指定大小的數
據.這對在寫內存映象的I/O 寄存器的值時很有用.

點評: 無

命令: Print Screen鍵
作用: 打印屏幕內容
語法: 按下PrintScreen鍵
用法:
這個功能將SoftICE屏幕上的內容輸出到打印機. 默認
的打印機端口是LPT1.可以用PRN命令來改變打印端口.
由于SoftICE對外設的讀寫是直接往I/O端口的所以這
個功能只能用于直接聯接在COM口或LPT口上的設備而
不支持網絡打印.
也可以用SoftICE Loader將內容記錄到文件中去.

點評:
打印機我沒有試過可用Loader將內容都記錄下來是非
常不錯的有時記錄一段小代碼不必動用w32dasm了用
Loader就可以代替非常好的我推薦您試一下!!!!


命令: PROC
作用: 顯示系統中所有進程的簡要信息
語法: PROC [-xo] [task]
用法: -x: 即-eXtended : 顯示每個線程的擴展信息
-o: 即-Objects : 顯示在進程句柄表中的對象列表
task : 任務名
輸出:
Process : 任務名
pProcess : 指向進程數據庫的指針
Process ID : 進程的Ring 3的ID
Threads : 進程所擁有的線程數量
Context : 地址區域
DefHeap : 缺省堆
DebuggeeCB : 調試塊


點評: 無

命令: QUERY
作用: 顯示某個進程的虛擬地址映象
語法: QUERY [[-x] address] | [process-type]
用法:
-x : 顯示某個線性地址在所有有效的地址區
域中的內存映象
address : 線性地址
processtype: 可被解釋成進程的表達式

QUERY 命令可以顯示某個進程的虛擬地址映象或某個
線性地址的映象.如果QUERY命令不加任何參數將顯示
當前進程的映象.
輸出:
Base : 指向連續頁的基址
AllocBase : 由VirtualAlloc函數申請的內存的基址
AllocProtect:在申請時被指定為存取保護
Size : 有相同特性的頁組成的內存區的大小Bytes
State : 內存區中頁的狀態:
----------------------------------
.Commit 受委托的頁意即物理定位的.
.Free 空閑的頁可以被申請
.Reserve 保留
----------------------------------
Protect : 當前存取保護
Owner : 內存區的所有者
Context : 地址區域

點評: 無

命令: R
作用: 顯示或更改寄存器的內容
語法: R [-d | register-name | register-name [=] value]
用法:
register-name: 以下任何一種:
----------------
ALAH AXEAX
BLBH BXEBX
CLCH CXECX
DLDH DXEDX
DIEDISIESI
BPEBPSPESP
IPEIPFLDS
ESSSCSFSGS
----------------
value : 將要修改的寄存器內容.寄存器名除 FL
(標志寄存器)以外其他所有的都是 16
進制的值.如果是FL的話value應如下:
----------------
O 溢出位
D 方向位? I 中斷位? S 符號位
Z 零標志
A 輔助進位
P 奇偶位
C 進位標志
----------------
在相應的標志前加"+""-"號表示打開或關閉
如: R FL +O 將溢出標志置位.如果不帶"+-"
號則將當前的狀態反轉.

-d :在命令窗口中顯示寄存器的值.

如果 R 命令不加參數光標將移到寄存器窗口中進行
實時修改.如果當前寄存器窗口不可見 那么這個命令
將自動顯示它.
另外修改FL寄存器時參數不必按照順序如:
R fl=o+a-c 一次修改3個標志位.


點評: 無.

命令: RS
作用: 暫時恢復程序屏幕
語法: RS
用法:
RS 命令允許用戶暫時恢復程序的視屏畫面. 這個命令
在調試頻繁更新屏幕的程序時特別有用.當顯示出程序
的原畫面后可以按任意鍵返回SoftICE.RS有個快捷鍵
F4.

點評: 無.

命令: S
作用: 在內存中搜尋特定數據
語法: S [-cu][address L length data-list]
用法:
address :搜索的起始地址
length :搜索的長度(字節長)
data-list:可以是一系列字節也可以是字符串 字符
串可以用單引號也可以用雙引號括住.
-c :使查找區分大小寫
-u :查找Unicode 編碼的字符串.

S 命令將從指定的內存地址開始查找指定內容的數據
一直到超過指定的長度為止.如果查到相應數據會在
當前的數據窗口中顯示它并在命令窗口中顯示信息.
想要繼續查找則只要打入 S 即可不需另外帶參數.
S 命令忽略被標記為不在內存中的頁. 想搜索一大段
內存的話請用一馬平川的30做為選擇符.

點評: 無.

命令: SERIAL
作用: 將控制臺轉移到串口終端上
語法: SERIAL [on [com-port] [baud-rate] | off]
用法:
com-port : 從1-4分別代表COM1COM2COM3COM4
其中COM1是默認值.
baud-rate: 波特率默認值由SoftICE自動偵測. 可能
值為:12002400480096001920023040
288003840057000115000.
用一條電纜將兩臺機器的COM口聯起來 有被調試程序
的機器稱為本地機(local) 另一臺做為控制臺的機器
稱為遠程機(remote).在聯接前 遠程機上必須運行軟
件包中的serial.exe程序所以遠程機至少要是MSDOS
操作系統.Serial.exe 程序的命令格式和Serial 指令
的格式一致. 當聯接建立后本地機的屏幕將恢復被調
試程序的屏幕(即windows屏幕) 而遠程機將顯示Sof-
tICE的調試窗口.電纜的做法如下:
25Pin的電纜
===========================
遠程 本地
2 ---------------------- 3
3 ---------------------- 2
4 ---------------------- 5
5 ---------------------- 4
6 ---------------------- 20
8 -----^
20---------------------- 6
^------- 8
7 ---------------------- 7
===========================

9 Pin的接法:
===========================
本地 遠程
2 ---------------------- 3
3 ---------------------- 2
5 ---------------------- 5
7 ---------------------- 8
8 ---------------------- 7
6 ---------------------- 4
1 ------^
4 ---------------------- 6
^------ 1
===========================
注:表中的^代表相接.如上面的
表示6和1先相接再接對方的4

遠程機上總可以用CTRL+D 來激活調試.
結束調試可以在遠程機上打入SERIAL off
遠程機要退出serial.exe程序可以用CTRL+Z

點評: 無

命令: SET
作用: 顯示或改變SoftICE的內部參數
語法: SET [keyword] [on | off] [value]
用法:
keyword : 內部變量
value : 有些變量有數值量不是簡單的ONOFF

Set 命令用來設置SoftICE的內部變量. 不加參數將顯
示所有這些變量的當前狀態 只加keyword將只顯示當
前變量的狀態.
變量列表
----------------------
ALTSCR [ON|OFF]
CASESENSITIVE [ON|OFF]
CODE [ON|OFF]
EXCLUDE [ON|OFF]
FAULTS [ON|OFF]
FLASH [ON|OFF]
I1HERE [ON|OFF]
I3HERE [ON|OFF]
LOWERCASE [ON|OFF]
MOUSE [ON|OFF][123]
PAUSE [ON|OFF]
SYMBOLS [ON|OFF]
TABS [ON|OFF][12345678]
THREADP [ON|OFF]
VERBOSE [ON|OFF]
----------------------

CASESENSITIVE ON 將使符號名對大小寫敏感
MOUSE 允許或禁止使用鼠標.還可以設定鼠標移動的速
度1最慢3最快2是中速也是缺省值.
SYMBOLS ON 將允許反匯編器在代碼中顯示符號名. 如
果為OFF將只顯示數字化的地址等.
其余見它們各自的命令解釋.

點評: 無.

命令: SHOW
作用: 列出回溯跟蹤歷史緩沖區中的指令
語法: SHOW [B | start] [l length]
用法: start : 十六進制的值 用以確定從回溯跟蹤緩沖區
開始反匯編的指令序號. 為 1表示是緩沖區
中的最新一條指令.
length : 顯示幾條指令.

SHOW命令將從SoftICE的回溯跟蹤歷史緩沖區中顯示指
令.如果有源程序的話將顯示源程序與反匯編代碼
沒有則只顯示匯編指令.

結果將在命令窗口中顯示所有指令都有一個數字前綴
用來表示指令的序號.1 是最新的指令. 可以用上下光
標鍵來瀏覽用ESC鍵退出.
SHOW 不帶參數或加B 參數將從緩沖區中最舊的一條指
令開始顯示. SHOW 帶序號參數將從指定的序號開始顯
示指令.
SHOW 命令只在回溯跟蹤歷史緩沖區不為空時才有用.
用BPR 的 T TW參數來裝滿它!

點評: 無

命令: SRC
作用: 在源程序反匯編代碼兩者混和之間切換顯示.
語法: SRC
用法:
SRC 命令將在程序源代碼反匯編后的指令 或兩者混
合之間來回切換顯示.SRC 的快捷鍵為 F3.

點評:
注意:要在當前程序有源文件時這一功能才能奏效 例
如:用BORLAND C編程序時所調試的程序example.c;
example.objexample.exe 都存在才可以.


命令: SS
作用: 在源程序文件中查找字符串
語法: SS [line-number] ['string']
用法:
line-number :十進制數的行號
string :用引號括起來的字符串

SS 命令將從指定的line-number(行號)開始在當前的
源程序文件中查找字符串.如果查找到附合要求的數據
將在代碼窗口的第一行處顯示.
如果不指定行號則SS將從當前代碼窗口的第一行處開
始查找.不帶任何參數的SS命令將繼續上次的查找.
注意:在用SS命令之前必須使代碼窗口可見 并使代碼
窗口顯示源程序文件才可.


點評: 無.

命令: STACK
作用: 顯示某個調用棧
語法: STACK [task-name | SS:[E]BP]
用法:
task-name :可以用TASK命令看到的任務名
SS:[E]BP :某個有效的??虻腟S:[E]BP值

STACK 命令用來顯示DOS程序Windows任務 32位代碼
的調用棧.STACK命令不加參數的話當前的SS:[E]BP的
值被默認為??虻幕?也可以加任務名或SS:[E]BP來
明確指定一個.

點評: 無.

命令: SYM
作用: 顯示或設置符號
語法: SYM [[section-name] ! ] symbol-name [value]]
用法:
section-name : 有效的區段名.可以只打部分字母.
區段名后要加!號如: SYM .TEXT!
將顯示可執行文件中.TEXT區段的
所有符號.
! : 如果只加參數 ! 將只顯示此符號
表中的模塊.
symbol-name : 有效的符號名可以加*來模糊尋找.
value : 用來將某個符號設為某個指定地址.

SYM命令用來顯示和設置符號地址.SYM命令在找尋某個
你或許只記得部分名字的符號時特別有用可以用* 來
代替末尾的字符也可以用 (逗號)來代替某一個字符


點評: 無.

命令: SYMLOC
作用: 重定位符號基址
語法: SYMLOC [segment-address | o | r | -c process-type | (section-number selector linear-address)]
用法:
segment address :段基址只在DOS中有用
o :對16位的表起作用.使所有選擇符
恢復原序
r :對16位的表起作用.改變所有段值
為適當的選擇符.
-c :指定一個context值.
section-number :32位表.PE文件中從1開始的區段
selector :32位表.保護模式的選擇符
linear-address :32位表.區段的基址

SYMLOC 命令可對一個已裝載的符號表進行調整.


點評: 無

命令: T
作用: 單步跟蹤
語法: T [=start-address] [count]
用法:
count :指定SoftICE將單步跟蹤多少次才停止.

T 命令是利用CPU的單步標志來進行單步跟蹤的.
如果指定 start-addressSoftICE 將從指定的地址處
開始單步跟蹤.如果寄存器窗口可見 則寄存器窗口將
高亮顯示哪些改變的寄存器的值.


點評: 無.

命令: TABLE
作用: 改變或顯示當前符號表
語法: TABLE [partial-table-name] | autoon | autooff | $
用法:
partial-table-name:符號表的名字或開頭的幾個字符
autoon :用來打開自動符號表切換功能
autooff :用來關閉自動符號表切換功能
$ :用$ 來表示切換到當前指令所在
的表中.

TABLE 命令當你有多個符號表裝入內存的時侯很有用.
SoftICE支持1632位WINDOWS程序DLLsVxDsDOS程序
DOS設備驅動程序TSRs.
每一時刻只能從一個符號表中取得符號你若是要用某
個符號表中的符號必須先用TABLE命令選中!
關鍵字AUTOON將使SoftICE每次彈出都自動切換到當前
指令所在的符號表中.而AUTOOFF正相反.


點評: 無.

命令: TABS
作用: 顯示或修改在顯示源文件時TAB鍵的寬度
語法: TABS [tab-setting]
用法: tab-setting : 從1到8表示TAB鍵的跨度
用TABs命令或SET TABS都可設置TAB鍵的跨度(列) 默
認值是8. TAB 命令不加參數將顯示當前的TAB鍵設置.


點評: 不過我用的3.20默認是4

命令: TASK
作用: 顯示Windows任務列表
語法: TASK
用法:
TASK 命令將顯示當前機器中運行的所有任務. 當前的
任務前面會有一個 * 號.這個命令在WINDOWS出現所謂
的general protection fault 時可以幫助你確定是由
哪個任務引起的.輸出:
Task Name :任務名
SS:SP :該任務最后交出控制時的堆棧地址.
StackTop :堆棧偏移的頂
StackBot :堆棧偏移的底
StackLow :當產生地址切換時最低的SP值
TaskDB :任務數據基址的選擇符
hQueue :任務的隊列句柄.
Events :隊列中事件


點評: 無.

命令: THREAD
作用: 顯示線程信息
語法: THREAD [TCB | ID | task-name]
用法:
TCB :線程控制塊
ID :線程ID
task-name :當前運行的32位過程.

THREAD 命令將顯示某個線程的信息.
如果不帶任何參數將顯示當前系統中所有活動的線程
如果將某個進程名作為參數將顯示所有該進程的線程
如果指定TCB或ID則 只顯示指定的線程.
Ring0TCB :Ring-0線程控制塊的地址.
ID :VMM線程ID
Context :該線程所屬進程的context句柄
Ring3TCB :Ring-3線程控制塊的地址
ThreadID :Ring-3線程ID
Process :擁有該進程的KERNEL32進程數據庫的地址
TaskDB :任務數據的選擇符
PDB :程序數據的選擇符(PSP)
SZ :線程的大小(1632)
Owner :進程的所有者.


點評: 無.

命令: TRACE
作用: 進入或退出摹擬跟蹤模式
語法: TRACE [b | off | start]
用法:
start :16進制的值.用來表示回溯跟蹤歷史緩沖區中
指令的序號.1 表示最新的一條指令.

TRACE 命令不帶參數將顯示當前摹擬跟蹤的狀態.
TRACE OFF 將退出當前的摹擬跟蹤模式回到正常的跟
蹤模式下.
TRACE B 從最老的一條指令開始摹擬跟蹤. TRACE 加
數字將從指定的序號開始摹擬跟蹤.
只有當回溯跟蹤歷史緩沖區不為空時才能用TRACE命令
參見BPR命令的說明.
回溯(摹擬)跟蹤中可以用XTXPXG來跟蹤程序寄存器
窗口中除了EIP改變外其他的都不變因為SoftICE 在
回溯跟蹤中不記錄所有寄存器的值.SoftICE 的命令除
了 XTGPHEREXRSET不能在回溯跟蹤模式下用外其
他都可以使用.


點評: 無.

命令: TSS
作用: 顯示任務狀態段和I/O端口的掛接
語法: TSS [TSS-selector]
用法:
TSS-selector :任何代表是個TSS的GDT選擇符

TSS命令通過讀取TR命令來獲得地址 從而顯示任務狀
態段的內容.用GDT命令可以看到TSS選擇符.如果TSS命
令不加參數將顯示當前的TSS.
輸出:
TSS selector value :TSS選擇符
selector base :TSS的線性地址
selector limit :TSS的大小
下面四行顯示TSS中寄存器的內容:
LDT GS FS DS SS CS ES CR3
EAX EBX ECX EDX EIP
ESI EDI EBP ESP EFLAGS
Level 0 1 and 2 stack SS:ESP
下面將顯示被VxD掛接的I/O端口
port number :16位的端口號
handler address :32位的I/O句柄地址
handler name :句柄的符號名.


點評: 無.

命令: TYPES
作用: 列出當前內存區域(context)中的類型名
語法: TYPES [type-name]
用法:
type-name : 顯示指定的類型名
TYPES 命令不加參數將顯示當前所有的類型名.如果加
參數將只顯示所指定的類型.如果參數是個結構TYPES
將自動展開結構并顯示其成員.


點評: 無

命令: U
作用: 反匯編指令
語法: U [address [l length]] | [symbol-name]
用法:
address : 段:偏移量或選擇符:偏移量
symbol-name : 將從指定的函數開始反匯編
length : 反匯編的長度(字節)

U 命令將從指定地址開始反匯編指定長度的指令.如果
代碼窗口可見則顯示結果將在代碼窗口中 否則在命
令窗口中. U 命令跟symbol-name(符號名)如果當前符
號表裝載的話U 命令可以從指定的符號地址開始反匯
編.


點評: 可用U在命令窗口中反匯編再用LOADER32存盤

命令: VCALL
作用: 顯示VxD可調用例程的名字和地址
語法: VCALL [partial-name]
用法:
partial-name:符號表的名字或開頭的幾個字符.

VCALL 命令將顯示Windows VxD API例程的名字和地址.
這些例程是Windows本身的VxD提供的并為為其他VxD準
備的.所顯示的地址只有當VMM VxD初始化過后才有效
如果SoftICE的初始化字符串中沒有一個 X;SoftICE將
在Windows啟動但VMM沒有初始化時彈出.


命令: WL
作用: 打開或關閉本地窗口;設置本地窗口的大小
語法: WL [window-size]
用法: window-size : 十進制的行數

WL 命令不加參數將使本地窗口在打開與關閉狀態之間
切換.WL 命令加參數將使本地窗口改變為指定大小.
所謂本地窗口也可稱局部(變量)窗口 它是從當前棧
中取的.


點評: 無

命令: WMSG
作用: 顯示Windows消息的名字和消息代碼
語法: WMSG [partial-name| msg-number]
用法:
partial-name : Windows 消息名或消息名的前幾個字符.
msg-number : 十六進制數消息代碼

WMSG 用來察看Windows消息名和消息代碼.這個命令在
和BMSG配合下斷點時非常有用.WMSG不加參數將顯示所
有Windows消息的名字如果加partial-name和msg-num
參數則只顯示附和條件的消息.


點評: 無.

命令: WR
作用: 打開或關閉寄存器窗口
語法: WR
用法:
如果當前寄存器窗口不可見 那么WR命令將使之可見
反過來WR命令將使寄存器窗口不可見.
寄存器窗口顯示80386寄存器集CPU的FLAGS.
該命令有快捷鍵 F2.


點評: 無.

命令: WW
作用: 打開或關閉視窗口;或改變視窗口的大小
語法: WW [window-size]
用法:
window-size : 十進制的窗口行數

WW 命令不加參數 將使視窗口在打開和關閉的狀態
之間切換.WW命令加參數將使視窗口改變為指定大小.
另外 ALT+W鍵將使光標在視窗口和命令窗口之間來
回切換.
參見 WATCH


點評: 無.

命令: X
作用: 從SoftICE窗口中退出
語法: x
用法:
X 命令將退出SoftICE將控制交還給剛才被SoftICE中
斷的程序.SoftICE的窗口將消失若有斷點的話再彈出.
用SoftICE呼叫熱鍵(默認CTRL+D)或在窗口中鍵入G 命
令所取得的效果和 X 的效果一樣.


點評: 無.

命令: XFRAME
作用: 顯示當前的異常出錯句柄框
語法: XFRAME [except-frame* | thread-type]
用法:
except-frame* : 指向異常出錯框的指針
thread-type : 代表一個線程
異常出錯框是由微軟結構化異常出錯處理API建立的.


點評: 無

命令: XG
作用: 在模擬(回溯)跟蹤狀態中運行程序到某一地址
語法: XG [r] address
用法:
XG 命令意思是在模擬跟蹤狀態中的G命令.R 參數表示
在回溯跟蹤歷史緩沖區中往回走.


點評: 無.

命令: XP
作用: 在模擬跟蹤模式中執行程序
語法: XP
用法:
XP 命令在模擬跟蹤模式中單步執行(P)


點評: 無.

命令: XRSET
作用: 重置回溯跟蹤歷史緩沖區
語法: XRSET
用法:
XRSET 必須用在非模擬跟蹤模式中用來清除歷史緩沖
區.


點評: 無.

命令: XT
作用: 在模擬跟蹤模式中單步跟蹤程序
語法: XT
用法:
XT 命令在模擬跟蹤模式中單步跟蹤程序
參數 R 表示反方向.
XT和XP的區別參見P命令.


點評: 無.

命令: ZAP
作用: 將內嵌的INT 1INT 3清為NOP
語法: ZAP
用法:
ZAP 命令在跟蹤程序時將程序中的INT 1INT 3指令換
為相等數量的NOP這在用戶為了調試程序方便而在程序
中加雜INT 1或INT 3指令過后又不想要時特別有用.
需注意:只有當INT 1INT 3出現在當前CS:EIP的前一條
指令位置處才有用.


(編輯:天命孤獨)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 一夜新娘第三季免费观看 | 欧美在线观看黄色 | 日日操夜夜操视频 | 天天碰夜夜操 | 国产精品久久久久久久久久久久久久久 | 精品影视一区二区 | 丰满年轻岳中文字幕一区二区 | 精品国产一区二区亚洲人成毛片 | 亚洲欧美国产精品va在线观看 | 久久影院yy6080| 国产美女视频一区 | 毛片大全在线观看 | 久久蜜桃精品一区二区三区综合网 | 国产精品久久久久久久久久大牛 | 国产精品久久久久影院老司 | 国产精品久久久久久模特 | 亚洲天堂在线电影 | 九九热九九热 | 18欧美性xxxx极品hd | 亚洲第一成网站 | 国产精品久久久久久影院8一贰佰 | 精品国产高清一区二区三区 | 国产黄色毛片 | www.54271.com| 99精品无人区乱码在线观看 | 美国一级毛片片aa久久综合 | 免费h片网站| 性欧美视频在线观看 | 一区播放 | 中文字幕 亚洲一区 | 狠狠干91 | 国产精品久久久久久久久久久久午夜 | 国产精品.com| 国产羞羞网站 | 国产资源在线看 | 欧美在线观看视频网站 | 色综合欧美 | 一本色道久久综合狠狠躁篇适合什么人看 | 欧美日韩在线播放 | 色域tv | 污版视频在线观看 |