SoftICE for WIN95中文命令解說(三) (轉)

worldblog發表於2007-12-11
SoftICE for WIN95中文命令解說(三) (轉)[@more@]

SoftICE for WIN95中文命令解說(三)
Copyright (c) 1999 ~tianwei

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

點評:
注意! SoftICE30的命令手冊(英文版PDF格式在此處寫
錯了!把$寫成&了!)($意思是告訴SoftICE 後跟真實模式
的段.以後有專門論及這些符號的文章.) 如果你是在
DOS視窗中用命令列調一個東西, 這時 G @ 0:intno*4
也可以,這時預設的OR就是真實模式,選擇符存在.
但如果在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] [de-reg] [IF expression]
[DO "command1;command2;..."]
用法:
size : 記憶體單元大小,B 為位元組(預設);W 為
字;D 為雙字.
verb : 所進行的操作,R 為讀;W為寫;RW為讀
寫(預設); X 為執行.
debug-reg : 除錯暫存器,DR0,DR1,DR2,DR3.
IF expression: 條件表示式,只有條件為"真"時,Sof-
tICE才在斷點處彈出.
Do command : 當SICE彈出時,自動執行的一些命令.
當verb 為 R,W,RW時,一旦彈出,SoftICE停在剛才發生
記憶體操作的後一條指令處.為 X 時,停在將要執行的指
令處.一般沒有必要,不要帶 debug-reg 引數,SoftICE
一開始是自動帶DR3的,以後按順序為2,1,0 只有當你
一個DEBUGGER時,而此DEBUGGER也用到了DRx,才需
特別指定一個防止衝突.
BPM斷點如果下在(400000-7FFFFFFF)內,那麼只有你下
斷點時當前的可定址區域( 見ADDR的點評)被啟用才能
發生中斷.別的不行.但如果斷點下在DLL中,這個DLL在
多個地址區域內都存在,那麼在這多個地址區域內都可
能發生中斷,簡單的例子如KERNEL32.DLL另外,size 參
數要緊跟BPM寫,成BPMD,BPMW之類.

點評: 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 引數代替. T,TW是記錄回溯跟蹤的引數, 具體
可見TRACE命令.BPR 有時會極大地降低效能,因為
所有對斷點所在頁的記憶體操作都會被SoftICE截獲分析
.如果程式中用到頻繁的記憶體操作,機器就會相當慢.
當條件滿足,SoftICE彈出時,CS:EIP停在發生記憶體操作
的那條指令上. BPR 斷點是下在當前被啟用的頁表上,
如果你下的RANGE在物理4MB以下,斷點就會在各虛擬機器
中,這樣,BPR就對LDT,GDT,IDTs,頁表本身不起作用.
另外,VMM中0級堆疊和嚴重(?)記憶體區域(critical ar-
eas)也不允許下BPR,很有可能當機.在95中,BPR只能用
於RING 3,所以對RING 0的VXD無用.(v3.20)

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


命令: BPRW
作用: 在某個程式或程式碼段所在的記憶體區域上下範圍斷點
語法: 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;..."]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991303/,如需轉載,請註明出處,否則將追究法律責任。

相關文章