SoftICE for WIN95中文命令解說(三)
發(fā)布日期:2021-12-22 21:22 | 文章來源:源碼之家
SoftICE for WIN95中文命令解說(三) Copyright (c) 1999 http://coobe.cs.hn.cninfo.net/~tianwei命令: BPINT 作用: 在某個中斷向量上下斷點 語法: BPINT int-number [IF expression][DO "command1;command2;..."] 用法: int-number: 中斷向量號,從0到FFHIF expression: 條件表達式,只有條件為"真"時,Sof-tICE才在斷點處彈出Do command: 當SICE彈出時,自動執(zhí)行的一些命令.當在硬中斷和CPU異常出錯的向量上下斷點時,SoftICE會在處理這個中斷的過程的第一條語句時彈出.而軟件中斷則停在INT XX處.注意:BPINT只對由中斷描述符表中的中斷起作用(WIN95).如果在一個DOS虛擬機(DOS窗口)中下此種斷點, 控制是由保護模式轉(zhuǎn)到虛擬機的中斷向量表中去.這時如果說停在INT XXH 處, 你用F8跟下去,是一下子看不到對這個中斷的實模式處理過程的,要走很遠,這時可用:G @ $ 0:int-number*4 來一下子走到實模式處的處理過程. 點評: 注意! SoftICE30的命令手冊(英文版PDF格式在此處寫錯了!把$寫成&了!)($意思是告訴SoftICE 后跟實模式的段.以后有專門論及這些符號的文章.) 如果你是在DOS窗口中用命令行調(diào)一個東西, 這時 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彈出時,自動執(zhí)行的一些命令.-h : 用硬件除錯寄存器在VxD中下斷點,只在PENTIUM級的芯片上才行當SoftICE彈出時,CS:EIP停在執(zhí)行I/O操作的下一條指令處.如果不帶參數(shù) verb,默認為RW.注意:在WIN95中,若不帶-h參數(shù),則只能在RING 3中下斷, 若要跟 VXD和VMM的I/O操作,請加-h.WIN95本身用VXD掛了很多I/O操作,用TSS可以看到 點評: 可以參看后面要講的TSS命令.命令: BPM 作用: 在內(nèi)存單元上下斷點 語法: BPM[size] address [verb] [debug-reg] [IF expression][DO "command1;command2;..."] 用法: size: 內(nèi)存單元大小,B 為字節(jié)(默認);W 為字;D 為雙字.verb: 所進行的操作,R 為讀;W為寫;RW為讀寫(默認); X 為執(zhí)行.debug-reg : 除錯寄存器,DR0,DR1,DR2,DR3.IF expression: 條件表達式,只有條件為"真"時,Sof-tICE才在斷點處彈出.Do command: 當SICE彈出時,自動執(zhí)行的一些命令.當verb 為 R,W,RW時,一旦彈出,SoftICE停在剛才發(fā)生內(nèi)存操作的后一條指令處.為 X 時,停在將要執(zhí)行的指令處.一般沒有必要,不要帶 debug-reg 參數(shù),SoftICE一開始是自動帶DR3的,以后按順序為2,1,0 只有當你調(diào)試一個DEBUGGER時,而此DEBUGGER也用到了DRx,才需特別指定一個防止沖突.BPM斷點如果下在(400000-7FFFFFFF)內(nèi),那么只有你下斷點時當前的可尋址區(qū)域( 見ADDR的點評)被激活才能發(fā)生中斷.別的不行.但如果斷點下在DLL中,這個DLL在多個地址區(qū)域內(nèi)都存在,那么在這多個地址區(qū)域內(nèi)都可能發(fā)生中斷,簡單的例子如KERNEL32.DLL另外,size 參數(shù)要緊跟BPM寫,成BPMD,BPMW之類. 點評: BPM用了DR3-DR0寄存器,所以最多只能設四個斷點.命令: BPR 作用: 在一個內(nèi)存范圍上下斷點 語法: BPR start-address end-address [verb] [IF expression][DO "command1;command2;..."] 用法: start-address: 起始地址end-address : 終止地址verb: R 讀;W 寫;RW 讀寫;T 回溯跟蹤指令;TW 回溯跟蹤內(nèi)存寫IF expression: 條件表達式,只有條件為"真"時,Sof-tICE才在斷點處彈出Do command: 當SICE彈出時,自動執(zhí)行的一些命令.BPR 用來在一段內(nèi)存區(qū)域上下斷點它沒有 X 參數(shù), 但可用 R 參數(shù)代替. T,TW是記錄回溯跟蹤的參數(shù), 具體可見TRACE命令.BPR 有時會極大地降低系統(tǒng)效能,因為所有對斷點所在頁的內(nèi)存操作都會被SoftICE截獲分析.如果程序中用到頻繁的內(nèi)存操作,機器就會相當慢.當條件滿足,SoftICE彈出時,CS:EIP停在發(fā)生內(nèi)存操作的那條指令上. BPR 斷點是下在當前被激活的頁表上,如果你下的RANGE在物理4MB以下,斷點就會在各虛擬機中,這樣,BPR就對LDT,GDT,IDTs,頁表本身不起作用.另外,VMM中0級堆棧和嚴重(?)內(nèi)存區(qū)域(critical ar-eas)也不允許下BPR,很有可能死機.在95中,BPR只能用于RING 3,所以對RING 0的VXD無用.(v3.20) 點評: BPR 有時真的很慢,機器就象死了一樣, 原因上面都說了.所以在知道內(nèi)存單元的時侯最好用BPM,只有無路可走才用BPR的范圍來試試.(當然也有非要用BPR 不可的地方) 命令: BPRW 作用: 在某個WINDOWS程序或代碼段所在的內(nèi)存區(qū)域上下范圍斷點 語法: BPRW module-name | selector [verb] [IF expression][DO "command1;command2;..."] 用法: module-name : WINDOWS程序的模塊名selector : 選擇符verb: R 讀;W 寫;RW 讀寫;T 回溯跟蹤指令;TW 回溯跟蹤內(nèi)存寫IF expression: 條件表達式,只有條件為"真"時,Sof-tICE才在斷點處彈出Do command: 當SICE彈出時,自動執(zhí)行的一些命令.BPRW是個在WIN程序的一個或多個可執(zhí)行模塊上下斷點的比較便捷的方法實際上它就是BPR, 不信你可以下一個,再用BL 看看.它只不過比BPR更有目的性.用HEAP命令可以幫助使用者看module-name和selector.BPRW 不用你再費心找范圍.BPRW 在回溯跟蹤時很有用.另外,BPRW 也是不能用于RING 0. 而且在跟 T 參數(shù)或和CSIP命令配合使用時有可能會很慢.RW參數(shù)是缺省值 點評: BPRW 有時侯很管用的, 因為你有可能不知道某個程序在何時在內(nèi)存中參與運行,用BPRW就可以在這個程序一運行時就彈出.而且可以分不同的代碼段. 命令: BPT 作用: 以前次的斷點為模板,設定新的斷點. 語法: BPT breakpoint_index 用法: breakpoint_index: 斷點序號.(用BL可以看到)BPT 是以前次的斷點為藍本,進行修改,成為新的斷點.它為使用者定新的斷點提供了方便. 點評: 參見第二部分的BPE 命令 命令: BPX 作用: 在可執(zhí)行語句上設定(或清除)斷點 語法: BPX [address] [IF expression] [DO "command1;command2;..."] 用法: address: 斷點所在的線性地址IF expression: 條件表達式,只有條件為"真"時,Sof-tICE才在斷點處彈出.Do command: 當SICE彈出時,自動執(zhí)行的一些命令.BPX 用來在指令處下斷點,程序一旦執(zhí)行到此,SoftICE就會彈出.當光標在代碼窗口中時,直接打入BPX就會在光標所在語句處設斷點,再打BPX 就取消. 當光標不在代碼窗口中時,BPX 必須跟參數(shù)(地址). 地址為標準的"選擇符:偏移",如果只輸入偏移,當前的CS值默認為選擇符.BPX 實際上是在你下的斷點處加一個INT 3指令, 到這條指令時就彈出來.這使得可以在一個程序中下多個斷點,而不必要使用少得可憐的寄存器.但當你在ROM中設斷點時,SoftICE自動用斷點寄存器來設斷.你也可以用BPM 命令的X參數(shù)來強迫SoftICE用斷點寄存器(DRx)來設斷. BPX 也可用16位代碼的模塊名來作地址參數(shù), 這樣,模塊中每個出口函數(shù)都被設了斷點. BPX 最多設256個斷點.(V3.20) BPX 有個快捷鍵 F9,當光標在代碼窗口中時,按F9就是設定(取消). 點評: BPX 可能是用得最多的斷點了. 有些ANTI-DEBUGGER的程序就利用INT 3 來作文章,看了上面的東西我想你可以閃過了吧!(不包括用DRx做文章的噢!) 命令: BSTAT 作用: 顯示某個斷點的狀態(tài) 語法: BSTAT [breakpoint-index] 用法: breakpoint-index :斷點的序號,用BL 命令可以看到用BSTAT 來顯示某個斷點的狀態(tài),各種統(tǒng)計參數(shù).BP # : 斷點的序號.若前面有 "*" ,表示斷點被禁止在Total 欄目中:Hits : SoftICE每經(jīng)過一次斷點,計數(shù) 1Breaks: 在IF expression子句為真的情況下,SoftICE 就會產(chǎn)生動作,要么彈出,要么記錄在內(nèi)存中, 不管怎樣,計數(shù) 1Popups: 在Breaks中SoftICE彈出的次數(shù)Logged: 在Breaks中SICE將情況記錄到內(nèi)存中的次數(shù)Misses: 在IF expression子句為False的情況下,SICE 雖然經(jīng)過這個斷點但沒有彈出行動的次數(shù)Errors: 由于IF 子句中內(nèi)存變量的問題或其他原因產(chǎn) 生的錯誤的次數(shù).比如跟一個C寫的程序,用變 量"IF mysymbol==1"來設斷,而在斷點處 my- symbol 這個變量所在的內(nèi)存由于釋放或其他 操作而無法訪問,就會產(chǎn)生Error.在Current 欄目中:Hits : 當前的在IF子句計算為True的情況下,但由于 BPCOUNT宏所定的次數(shù)未到而記錄下的累計數(shù)Misses: 當前在IF子句計算為False的情況下, 且(或) BPCOUNT宏所定的次數(shù)未到而記錄下的累計數(shù)在雜項(misc)欄目中:Status: SoftICE內(nèi)部對最近一次斷點進行計算的狀態(tài) 代碼.(錯誤代碼)如果為0 的話,表示沒有錯.Scode : SoftICE最近一個內(nèi)部狀態(tài)代碼,如果為0的話 表示沒有Errors.Cond. : 如果斷點帶有附加判斷(即有IF expression) ,則為Yes,否則為NoAction: 如果斷點帶有附加的動作(即有DO command), 則為Yes,否則為No 點評: 無
版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
相關文章