DEBUG命令參數(shù)詳解 |
發(fā)布時間: 2012/5/18 16:39:06 |
DEBUG 命令行參數(shù)形式: 格式:DEBUG [[驅(qū)動器號:][路徑]文件名 [調(diào)試參數(shù)]] 用途:debug將所指定文件裝入內(nèi)存,顯示提示符“-”等待進一 步命令。若裝入文件為.exe文件,按照重定位原則裝入為可執(zhí)行狀態(tài) 。.com文件類似。若為其它類型文件則直接進行內(nèi)存映射,由偏移量 100H原封不動讀入內(nèi)存。 debug將在緩沖區(qū)為被調(diào)試程序建立適當?shù)腜SP(程序段前綴, Program Segment Prefix)。在PSP中的偏移量80H為命令行的末尾。 而且在偏移量5CH和6CH由包含參數(shù)后面的可選參數(shù)構(gòu)成缺省的FCB( 文件控制塊,F(xiàn)ile Control Block)。 進入時各寄存器初使情況: 寄存器 .com程序 .exe程序 AX 指定驅(qū)動器錯誤碼 指定驅(qū)動器錯誤碼 BX 程序空間的高地址 程序空間的高地址 CX 程序空間的低地址 程序空間的低地址 DX 0 0 SI 0 0 DI 0 0 BP 0 0 SP 0FFFFH或可利用的 不定 內(nèi)存空間上限減2 IP 100H 目標程序的的代碼 入口偏移量 CS PSP 目標程序代碼段址 DS PSP PSP CS PSP PSP SS PSP 目標程序堆棧段底 命令: A: 編寫匯編代碼(Assemble) 格式:A[地址] 用途:程序允許在指定位置(若無缺省為IP指針位置)進行匯編 程序書寫。 細節(jié): *所有數(shù)值皆為十六進制整數(shù),數(shù)值后不帶“H” *不支持文件管理用的目錄表、宏標記、條件匯編 *跳轉(zhuǎn)指令后要直接書寫十六進制地址不支持標號 *數(shù)據(jù)類型若非默認類型,要以PTR加以指定 *字符串操作要指定類型為B或W(如lodsb和lodsw等)及長度 *用DB和DW接受數(shù)據(jù)定義,直按進行匯編 *對內(nèi)存地址加[]以與立即數(shù)區(qū)分 C: 內(nèi)存內(nèi)容比較(Compare) 格式:C 地址范圍 地址 地址范圍:做比較的第一個內(nèi)存域始未地址或始地址和長度 地址: 做比較的第二個內(nèi)存域的始地址 用途:*對內(nèi)存中兩個域的內(nèi)容加以比較,以字節(jié)為單位。對發(fā)現(xiàn)有 差別的內(nèi)容及其地址用如下形式顯示出: 地址1 始位置 未位置 地址2 *若地址范圍或地址不含段地址,默認為DS的值。 D: 顯示內(nèi)存內(nèi)容(Dump) 格式:D[地址范圍] 地址范圍:給定顯示區(qū)的始未范圍或始地址和長度。 用途:*內(nèi)存內(nèi)容顯示指令,以十六進制和ASCII碼形式顯示指定范 圍內(nèi)的內(nèi)存內(nèi)容。 *若不指定范圍,第一次按目標程序的CS:IP的位址開始顯示。 以后使用上次顯示的未地址的下一地址為開始進行顯示。 *若不指定長度,則顯示128byte的內(nèi)容。計8行。 E: 數(shù)據(jù)的輸入 格式:E 地址 數(shù)值列表 地址: 數(shù)據(jù)輸入的內(nèi)存始地址 數(shù)值列表:從始地址輸入的連續(xù)數(shù)據(jù) 用途:*向內(nèi)存區(qū)域輸入數(shù)據(jù)。數(shù)據(jù)以十六進制形式,或以ASCII碼形式 均可。覆蓋掉原有數(shù)據(jù)。 *十六進制時要用空格、逗號或制表符加以分隔。字符串則要用單 引號或雙引號括起且區(qū)分大小寫。 *若不指寫段址,則默認為DS中值。每寫完一數(shù)據(jù)地址自動增加。 *如省略數(shù)值列表,對應每一字節(jié)請求輸入。點號前為該字節(jié)原 始值,點號后請求輸入。這時若按空格,跳過這一字節(jié);按回車, 結(jié)束輸入;按減號或連字符,顯示前一字節(jié)內(nèi)容。 *出錯時內(nèi)存內(nèi)容有可能已被改變。提示后終止。 *字符串只能以數(shù)值列表的形式輸入,不能按地址提式輸入。 F: 內(nèi)存填充(Fill) 格式:F 地址范圍 數(shù)值列表 地址范圍:數(shù)據(jù)輸入的內(nèi)存始本地址或首地址和長度 數(shù)值列表:從始地址輸入的連續(xù)數(shù)據(jù) 用途:*將列表中數(shù)據(jù)寫入內(nèi)存。輸入數(shù)據(jù)以十六進制或ASCII碼形式。 覆蓋原有信息;若出錯,顯示出錯信息,原有信息保留。 *若未指寫段址,默認為DS寄存器值。 *列表中可有十六進制或字符串兩種形式,各內(nèi)容用空格、逗號、 制表符隔開。字符串必須以單引號或雙引號括起,區(qū)分大小寫。 *若要填充區(qū)域大于數(shù)據(jù)數(shù)目,列表可重復使用;相反,若列表 比要填充區(qū)域大時,則自動截斷后面的數(shù)據(jù)。 G: 程序執(zhí)行(Go) 格式:G[=地址][斷點0][……斷點] 地址: Debug開始執(zhí)行的地址。 斷點0……斷點9:指定的0—10個臨時中斷點。 用途:*將CPU控制權(quán)由Debug轉(zhuǎn)移給被調(diào)試中的程序。不設斷點時,則程 序的執(zhí)行或是中途失敗蚴欽?=崾?=崾?保?崾居小癙rogram termminated nomally”,即程序結(jié)束正常,控制權(quán)再返回到 Debug。 *此時因數(shù)據(jù)有可能重寫,若需再次執(zhí)行,因重新裝入。 *地址中,如未指定段址,則使用目標程序的CS寄存器中的值。當 地址省略時,則Debug使用目標程序的CS:IP寄存器的值開始執(zhí)行。 且為與斷點區(qū)分,地址參數(shù)前必須加等號,否則將其認為是第零 個斷點。 *斷點參數(shù)可指定10個臨時斷點。當程序執(zhí)行到指定的斷點地址時 則發(fā)生中止。與斷點表內(nèi)的次序無關(guān),斷點可按任意次序輸入。 *中止時,將會顯示寄存器的內(nèi)容、標志位狀態(tài)及CS:IP指出的指 令(也就是下一條將要執(zhí)行的指令),然后是提示符“-”。 *若沒有裝入可執(zhí)行程序或程序內(nèi)容未知,有可能進入死狀態(tài)。 *若目標程序的棧不起作用或太小,則可能引起系統(tǒng)“破碎”。 H: 執(zhí)行十六進制算術(shù)運算(Hexadecimal) 格式:H 值1 值2 值1、2為0—FFFFH范圍內(nèi)的任意十六進制數(shù)。 用途:*用來求兩個十六進制數(shù)的和、差,對結(jié)果顯示為值1+值2及值1- 值2。如果值2 > 值1則顯示其補碼。 *雖然很少用,但事實還是很有用的,熟練掌握。 I: 端口的輸入(Input) 格式:I 端口地址 端口地址:0—FFFF范圍內(nèi)的I/O端口地址。 用途:用來讀取指定I/O端口地址,并以2位十六進制數(shù)加以顯示。 警告:I指令將直接訪問計算機硬件,不是所以錯誤檢查都能進行,所以 使用是必須小心。對某個外設控制器分配端口的輸入操作,可能 干涉系統(tǒng)固有的操作。對沒有分配指定I/O端口的設備,或該端口 為寫入專用端口等情況,I命令都不能保證可顯示。 L: 裝入命令(Load) 格式:L 地址 或 L 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù) 地址: 存放從盤中讀出數(shù)據(jù)的內(nèi)存地址。 驅(qū)動器: A=0, B=1, C=2, 以此類推。 開始扇區(qū):以十六進制數(shù)表示要最先裝入的邏輯扇區(qū)號。 扇區(qū)數(shù): 以十六進制數(shù)表示要裝入連續(xù)扇區(qū)個數(shù)。 用途:*若輸入了一個不完全的L命令時,則對下述磁盤文件進行裝入: 1在Debug命令行中指定過的文件; 2由命令末尾參數(shù)N指定的文件。 *在地址中若未指定段址,則使用CS中的值。若為可執(zhí)行文件按重 定位原則裝入為可執(zhí)行狀態(tài)。 *裝入后文件長度,或.exe文件程序的實際長度放入目標程序的BX 和CX兩個寄存器中。高十六位放在BX中。 *若在命令行中給出所有參數(shù),則不必用MS-DOS的文件系統(tǒng)訪問磁 盤。 M: 數(shù)據(jù)傳送(Move) 格式:M 地址范圍 地址 地址范圍:被復制域的始末地址,或始地址和長度。 地址: 數(shù)據(jù)復制目的域的起始地址。 用途:*對內(nèi)存中數(shù)據(jù)進行復制。目的域被覆蓋。 *若地址范圍中無段址,則使用DS內(nèi)容;若地址中無段址,使用地 址范圍中的值。 N: 文件名或命令末尾的參數(shù)(Name) 格式:N 參數(shù) [參數(shù)……] 參數(shù):插入到仿真的PSP中去一個以上的文件名或者是開關(guān)項。 用途:*對磁盤讀寫操作L、W指定目標文件。 O: 端口的輸出(Output) 格式:O 端口 字節(jié) 端口:I/O端口地址。 字節(jié):寫入I/O端口的0—FFFF范圍的值。 用途:向I/O端口地址寫入一字節(jié)。 警告:錯誤的操作將導致系統(tǒng)崩潰。 P: 循環(huán)或子程序處理(Procedure) 格式:P[=地址] [命令數(shù)] 地址: 執(zhí)行的起始地址。 指令數(shù):執(zhí)行的指令條數(shù)。 用途:*循環(huán)或子程序處理。將循環(huán)、串指令、軟件中斷或子程序調(diào)用 視為單語句。執(zhí)行中了,顯示目標程序寄存器內(nèi)容、標志位狀態(tài) 和下一條要執(zhí)行的指令。 *若地址參數(shù)中無段址,則使用CS中的值。完全忽略地址時,則從 程序中的CS:IP指定位置開始執(zhí)行。 Q: 結(jié)束Debug操作(Quit) 格式:Q 用途:程序結(jié)束返回。對未保存的結(jié)果丟失。 R: 寄存器顯示與更改(Register) 格式:R [寄存器] 寄存器:AX BX CX DX SP BP SI DI DS ES CS IP PC F 用途:*若R不帶參數(shù),則顯示所有寄存器的內(nèi)容和狀態(tài)標志、下一指令。 *若指定新值,在顯示內(nèi)容后,給出冒句提示輸入新值。回車結(jié)束。 *對狀態(tài)字F,在連字符“-”后以空格間隔輸入新值,次序不計。 *若直接回車,則跳過修改,寄存器內(nèi)容不變。 S: 內(nèi)存檢索(Search) 格式:S 地址范圍 列表 地址范圍:想來你該明白是什么樣了吧:) 列表: 欲檢索的一個以上的字節(jié)值或字符串。 用途:*在指定的內(nèi)存范圍內(nèi)檢索列表的值。對每一個匹配的地址進行 顯示。 *若起地址中無段址,默認為DS的值。 *檢索范圍不得大于FFFFH *列表必須以分隔符(空格,逗號,制表符等)分隔;字符串要加 單引號或雙引號括起,區(qū)分大小寫。 T: 程序執(zhí)行跟蹤(Trace) 格式:T[=地址][指令數(shù)] 地址: 執(zhí)行的第一條指令的地址。 指定數(shù):執(zhí)行的機器指令的條數(shù)。 用途:*執(zhí)行單條指令,顯示寄存器及下一條指令。 *在地址參數(shù)中若無段址,則默認為CS寄存器的值。 *若全部省略,則由CS:IP寄存器指出的地址開始執(zhí)行。 *以后則順序執(zhí)行。 *對ROM內(nèi)的跟蹤應使用T命令。 警告:對Intel 8259 中斷屏幕的內(nèi)容(IBM PC及兼容機端口20H和21H) 的更改,或者系統(tǒng)功能調(diào)用(INT 21H),不能使用T指令,對上述 情況要使用P指令。 U: 反匯編(Unassemble) 格式:U [地址范圍] 用途:*將機器指定解碼為匯編語言的助記符。 *地址范圍中無段址時,默認使用CS值。 *當始地址與實際邊界不一致時,結(jié)果將不可信。 *若不含末地址或長度,則自給定始地址起反匯編32個字節(jié)。 *以后由前次U最后一指令的下一指令做32字節(jié)的反匯編。 *若從沒用過U,則于CS:IP開始進行反匯編。 *只能對8086指令解碼,對其它以DB來顯示。 W: 寫入文件或扇區(qū)(Write) 格式:W [地址] 或 W 地址 驅(qū)動器 開始扇區(qū) 扇區(qū)數(shù) 地址: 待寫入盤的數(shù)據(jù)在內(nèi)存中的起始位置。 驅(qū)動器:寫入數(shù)據(jù)的盤的驅(qū)動器號(A=0,B=1,C=2,以下類推)。 始扇區(qū):寫入數(shù)據(jù)的最前的邏輯扇區(qū)號(0—FFFFH)。 扇區(qū)數(shù):寫入數(shù)據(jù)的連續(xù)扇區(qū)個數(shù)(0—FFFFH)。 用途:*將內(nèi)存中的文件或一個個扇區(qū)傳送到磁盤上。 *W若不帶參數(shù),或只有地址參數(shù),則按BX:CX寄存器指出的字節(jié),從內(nèi) 存向磁盤寫入數(shù)據(jù)。此時的文件名是此命令前最后一個使用過的文件名 ,或者是N命令中指定的文件,如果沒有使用過N命令,則使用Debug命 令行中指定的文件。 *Debug的W命令,不能向擴展名為.EXE或.HEX的文件中寫入數(shù)據(jù)。 *這可用改擴展名的方法得到應用,讓其能對.exe文件寫入。 *若無地址項,則認為是目標程序的CS:0100H。 *該命令可不通過MS-DOS的文件系統(tǒng)直接訪問磁盤的邏輯扇區(qū)。但必須 以十六進制形式給在命令行中給定各參數(shù)。 *W命令不能對用于網(wǎng)絡上的驅(qū)動器進行邏輯扇區(qū)寫入處理。 警告:若參數(shù)有誤,則可能破壞盤文件結(jié)構(gòu)。 請務必先搞清再作試踐,特別是對硬盤的操作。 本文出自:億恩科技【www.cmtents.com】 |