命令介紹,命令功能,A 彙編命令,C比較命令,D轉儲命令,E修改記憶體命令,F填寫命令,G執行命令,H十六進制算術運算命令,L命令,M數據命令,N命令,O輸出命令,P進程命令,R暫存器命令,S命令,T跟蹤命令,U地址命令,W寫盤命令,"XD"命令,"XM"命令,"XS"命令,實際套用,
命令介紹
它的功能包括以下幾個方面。
⒈ 直接輸入,更改,跟蹤,運行彙編語言源程式;
⒉ 觀察作業系統的內容;
3.查看ROM BIOS的內容;
⒋觀察更改RAM內部的設定值;
⒌以扇區或檔案的方式讀寫軟碟數據
DEBUG把所有數據都作為位元組序列處理。因此它可以讀任何類型的檔案。DEBUG可以識別兩種數據: 十六進制數據和ASCⅡ碼
字元。它的顯示格式是各個位元組的十六進制值以及值在32與126之間的位元組的相應ASCⅡ碼字元。
在DEBUG中輸入數據有兩種方法: 提示方法和非提示方法。在用提示方法時,用戶可以輸入要求輸入數據的命令,後跟數據所要輸入的地址。然後用戶就可以看到該地址中已有內容及一個冒號提示符。此時用戶可以在提示符下輸入一個新的值或者按下
回車鍵或CTRL+C回到短橫(-)提示符。在運用非提示方法時,用戶可以輸入要輸入數據的
記憶體地址以及要輸入的位元組。但與使用字處理程式或正文
編輯程式時不一樣,在使用DEBUG時,用戶不能直接移動
游標到一
入口點輸入或修改數據,而要一次輸入一個或幾個位元組。
在使用DEBUG時可以只涉及記憶體中的數據,從而一般都要指定所要處理的記憶體地址,地址的輸入格式是: [段地址]: [位移]。如果沒有輸入地址,DEBUG將假定為當前記憶體段,從位於地址100H的位元組開始。前100H位元組保留給
程式段前綴使用,這一專用區域用於建立DOS與程式之間的聯繫。DEBUG總是用四位
十六進制數表示地址。用兩位數表示十六進制數據。
講到這裡大家應該對DEBUG有了初步的了解,但是光知道這些可不夠,接下來我來講講DEBUG的命令格式和命令。當輸入DEBUG,就調用了DEBUG程式,就會出現一個短橫提示符,用戶就可以在這一短橫後輸入DEBUG程式的命令。有些DEBUG命令會顯示一個
記憶體地址並產生一個作為提示符的冒號。在這些提示符後,用戶可以輸入一個新值以改變所顯示位置原來的值。如果用戶不輸入一個新值而是按下回車或CTRL+C,那么原來的值不會改變。
一般用不著把地址和命令名字分開。例如,用轉儲命令D察看100號地址的數據,那么這個命令可以用以下任一種形式輸入:
D100
D,100
D 100
如果輸入的命令中出現了錯誤,DEBUG將在下一行對著錯誤的位置標記出來,例如:
-s100 d 12
^Error
命令功能
A 彙編命令
功能: 將指令直接彙編成機器碼輸入到記憶體中。
說明: 用於小段程式的彙編及修改目標程式,所有輸入的數字均採用十六進制, 用戶裝入記憶體的彙編語句是連續存放的,若沒有指定地址,並且前面沒有使用彙編命令,該語句被彙編到 CS:0100區域。
例A:>DEBUG
-a 0100
08F1:0100 MOV AH,09
08F1:0102 MOV DX,109
08F1:0105 INT 21H;
08F1:0107 INT 21H;<-XP下運行cmd debug時,應該是INT 20H,21H會出遇無效指令錯誤
08F1:0109 db 'May I help you $'
08F1:0115←離開a狀態
-g ←運行
May I help you 運行結果
Program terminated normally表示運行正常
C比較命令
功能: 比較兩記憶體區域中的內容是否相同,若不同則顯示其地址和內容。
如:C4000:0 3F 100
就是用來比較4000:0000-4000:003F與DS:0100-DS:013F之間的內容:其顯示格式如下:
例:比較4000:0 3F 100內容的差異
-C4000:0 3F 100
4000:0000 64 43 08F1:0100
4000:0001 3E 69 08F1:0101 顯示內容的差異處
4000:0002 78 FF 08F1:0102
……………………………………
如:-C 0 4 100;比較DS:0---DS:4與DS:100---DS:104
C命令的另一種格式如下:C地址1 L 長度 地址2
如:-C000:0 L4 0;由0000:0與與DS:0開始比較它同-C0000:0 3 0命令相等,顯示結果如下:
0000:0000 8A C0 08F1:0000
0000:0001 10 20 08F1:0001 它們都比較4個位元組
0000:0002 1C 00 08F1:0002
0000:0003 49 7F 08F1:0003
D轉儲命令
* D[地址] 或D[起始地址][目的地址] 轉儲命令
功能: 以記憶體映象方式顯示記憶體中的信息。
說明: 轉儲用左右兩部分顯示記憶體映象內容,左邊以十六進制,右邊以ASCⅡ字元顯示,所有不可列印字元用句號(。)表示。每行顯示16個位元組的內容,在第八和第九個位元組之間有一個
連字元 - 此命令隱含的
段地址為DS的值。若未指定起始地址,則D命令從顯示的最後一個單元的下一個單元開始顯示,若以前沒有使用給D命令, 則從初使化的
段暫存器的內容,加上地址
偏移量 0100H 開始顯示。
例:-d10,4f即為顯示DS:4f的內容在D命令中如不指出段地址,則其默認為DS段。
如指明段地址,則從指明的段地址列出指定的範圍
如:-dfff:00:0f
我們也可以指定長度來列出所需要記憶體內容
如:-d 100 L20即為顯示由DS:100-DS:11F的內容,共20H個位元組:
E修改記憶體命令
* E[地址] [位元組串)
功能: 從指定的地址開始修改記憶體值。
格式:E起始地址[數據行]
⑴用給定內容代替指定範圍的單元內容
-E地址 內容表
例:-E100 41 42 43 44 48 47 46 45
-D 100,L08
08F1:0100 41 42 43 44 48 47 46 45 ABCDHGFE…
⑵逐個記憶體內容
例:-E 100:
08F1:0100 76 42 :42是操作員鍵入
此命令是將原100號記憶體內容76修改為42,用D命令可察看。
F填寫命令
* F[地址範圍] [位元組或位元組串] 填寫命令
功能: 將要填寫的位元組或位元組串填入由地址範圍指定的存儲器中。
例:-f100 120 61 62 63 64
-d100 11f
08F1:0100 61 62 63 64 61 62 63 64 -61 62 63 64 61 62 63 abcd abcd abcd abcd
08F1:0110 13 67 98 E3 C8 2E B3 B6 -03 21 AC 19 3121 4E 96 g……1…
如果數據行超出指定的範圍,則填不下的數值會被忽略。
例:-f 100 107 41 43 43 44 45 46 47 48 49 4A 4B 4C 4D -d 100,lof
08F1:0100 41 42 43 44 45 46 47 64 -61 62 63 64 ABCDEFGdabcdabcd
由上例可看出,超出範圍的數據被忽略
另外,F和E命令都可填入字元串:
如:-F 100 105 "MSDOS"
-d 100 l0f
08F1:0100 4D 53 44 4F 53 46 47 64 -61 62 63 64 MS DOS FGabcd abcd
G執行命令
功能: 執行正在調試的程式,當達到
斷點時停止執行, 並且顯示暫存器標誌和下一條要執行的命令。
說明: 如果沒有指定起始地址,那么當前指令地址由CS,IP暫存器的內容來決定,如果用戶指定起始地址就從指定的起始地址開始執行。如果指定斷點,當指令到達指令地址時停止執行,並顯示各暫存器標誌位的內容和下一條要執行的命令,最多允許用戶設定10個斷點。
例:A:\>debug tan.exe
-u:反編譯成彙編語言程碼
…………
. .
Program terminated normally:
另外:我們在DEBUG下可運行一個檔案.EXE
如:A:\>debug tan.exe
-g
即可開始運行此程式,和在DOS下完全一樣:
H十六進制算術運算命令
* H[數值][數值] 十六進制算術運算命令
功能: 分別顯示兩個十六進制數相加的和以及第一個數減去第二個數的差。
說明: 替用戶完成簡單的十六進制數的運算。
例:-h4538 5623
9B5B EF15
I命令
功能: 從指定的連線埠輸入並顯示(用十六進制)的一個位元組。
例:-i70
F9;顯示70連線埠的內容為F9
I命令可由80X86的64K個連線埠取數據
L命令
功能: 將一個檔案或盤的絕對扇區裝入存儲器。
說明: 單個L命令能夠裝入的最大扇區數是 80H,其中盤號 0,1,2,3……分別代表 A,B,C,……出現讀盤錯,顯示錯誤信息。
⑴格式1.L裝入地址 驅動器名 起始扇區/扇區數
這種方式可把磁碟上指定
扇區範圍的內容裝入到
存儲器從指定地址開始的區域中,在此外扇區編號引用邏輯/扇區的方式。
例:-L 100 0 01,將A驅的0扇區裝至CS:100上
-d 100 10f
08F1:0100 EB 3C 90 3C 53 44 4F 53 -36 2E 32 32 02 01 01 00.L,MSDOS 6.22……
⑵格式2:L裝入地址
這種方式可把指定檔案裝入記憶體,裝入的檔案可在進入DEBUG時指定亦可用N命令建立,格式為-n檔案名稱:
例1 DEBUG tan.pas
-L 100
例2 DEBUG
-n tan.pas
-L 100
L命令中所用的磁碟代碼A=00,B=01,C=02……
M數據命令
功能: 把地址範圍內的存儲器單元的內容移到起始地址的指定地址中
說明: 傳送期間,源區和目標區可以部分重疊;傳送後源區域數據保持不變。
例:-e100 41 42 43 44 45
-d100 10f
08F1:0100 41 42 43 44 45 62 62 63 64 -61 62 63 64 61 62 63 64 ABCDEBCDABCDABCD
-M 100 104 110
-d110 L1F
08F1:0100 41 42 43 45 0A 21 19-20 01 01 20 07 96 87 9F ABCDE……
N命令
* N[盤號: ] [路徑] [檔案名稱] [擴展名]
功能: 定義操作檔案名稱。
說明: 可同時定義兩個操作檔案,並將形成的檔案控制塊相應的設定在記憶體 CS:5C和CS:6C上,供以後的L和W命令操作之用。我們在運行程式偵錯時,在啟動DEBUG時在其後加檔案程式名以及該程式的參數或運行檔案,但當我們偵錯一段後,可能裝入其它檔案來測試,這時我們可利用N命令來設定而無需退出DEBUG。
例:A:\>DEBUG tan.exe
-n youg.pas
當程式偵錯一段時間後,若要把tan.exe裝入tan1.pas則-ntanl.pas
O輸出命令
功能: 傳送位元組到指定的輸出連線埠。
例:當我們遇到開機要求輸入口令時,可用如下方式取消
-O 70 10
_O 71 00
P進程命令
功能: 將一個子程式調用指令,循環指令,中斷指令或一個重複字元串指令,停止在下一條指令上。
說明: 在執行一條子程式調用指令,循環指令,中斷指令或一個重複字元串指令時,發出P命令去執行有關指令,並且返回到要執行的下一條指令。P命令和T一樣選用來跟蹤程式運行過程用的命令,我們可以在P命令中指定程式運行的起始地址,指令個數,如未指定則CS:IP所指定程式的地址開始一次運行一條令。
P與T命令的差別在於P命令把CALL/INT當成一條指令來執行,簡化了跟蹤過程,P命令只運行RAM記憶體的命令,而T命令則可運行RAM和ROM里的程式。
R暫存器命令
功能: 一,顯示單個暫存器的內容,並提供修改功能。二,顯示所有暫存器內容, 再加上字母標誌位狀態以及要執行的下一條指令。三,顯示8個標誌位狀態, 並提供修改功能。若不想改變則回車即可。
例:-r bx
bx 0050
:51
-r
AX=0000 BX=0051 CX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0003 ES=0CD3 SS=0CD3 IP=0100 NV UP EI PL NZ NA PO NC
0CD3:0100 0F DB OF
若想改變
標誌暫存器,用-RF回車,則DEBUG會將標誌內容顯示出來,若想改變任一標誌,只要輸入該標誌的名稱即可。
標誌名稱 設定 未設定 標誌名稱 設定 未設定
滋出 OV(溢出) NV(未溢出) 零位 ZR NZ(不等於零)
方向 DN(減少) UP(增加) 輔助進位 AC NA(無進位)
中斷 EI(許可) DI(禁止) 奇偶標誌 PE(偶) PO(奇)
符號 NG(負) PL(正) 進位 CY NC(清除進位)
例:-Rf
NV UP EI PL NZ NA PO NC :-OV DI← 輸入值
S命令
功能: 在指定的地址範圍內查找給定的字元串。
說明: 用來指定在地址範圍內查找一個字元串,若找到則顯示其地址, 否則直接顯示DEBUG提示符。隱含地址為DS段值。
在此記憶體可以用(起始地址)(終止地址)或(起始地址)L(長度)的方式來表示,而字元串與數據行則可混合使用:如:02.76"BC"。
例:-d100 lof
08F1:0100 OF 2A 41 43 0B 31 42 96 -FF F0 B9 8A F3 00 B1.. AC,1B...
-S 100 lof"AC"
08F1:0102← 表示找到,由0102開始,
T跟蹤命令
功能: 逐條跟蹤程式的執行,每條指令執行後都將顯示各暫存器的內容。
說明: 通常採用跟蹤一條指令,但用戶也可以用指令條數設定一次跟蹤多條指令, 每執行一條指令之後,顯示所有暫存器的內容和標誌狀態。
逐條指令跟蹤 -T[=起始地址]
從指定地址起執行一條指令後停下來,顯示所有暫存器內容及標誌位的值,如來指定地址則從當前CS:IP開始執行。
A:\>DEBUG
-A
08F1:0100 MOV DL,03H
08F1:0102 MOV AH,02H
08F1:0104 INT 21H
08F1:0106 INT 20H
08F1:0108
-T
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=08F1 ES=08F1 SS=08F1 CS=08F1 1P=0105 NV UP EI PL NZ PO CY
09F1:0102 B402 MOV AH,02
若指定起始地址,則T命令會從指定的地址開始跟蹤,我們還可以指定跟蹤一次所
運行指令的個數,用Ctrl+S暫停螢幕的顯示,以便觀察。
-t=100 10;由CS:100開始跟蹤10條指令
U地址命令
功能: 將記憶體中的內容轉換為彙編語句。
說明: 反彙編的位元組數取決與用戶的系統顯示形式,以及在U命令中使用的可選項。
⑴從指定地址開始編譯,反彙編32個位元組
-U[地址]←從CS:100開始,其反彙編32個位元組
如果地址被省略,則從一個U命令的最後一條指令的下一條單元開始彙編32個位元組。
⑵對指定的存貯範圍進行反彙編
-u起始地址 終止地址(L 長度)
例:-U 100 109
08F1:0100 CD20 INT 20
08F1:0102 FF9F009A CALL FA12[BX+9A00]
08F1:0106 F0 LOCK
08F1:0107 FE1D CALL FAR [DI]
08F1:0109 F0 LOCK
說明:如指定了範圍則整個範圍全都會被反編譯
W寫盤命令
* W[地址] [盤符:] [起始
扇區] [扇區數] 寫盤命令
功能: 將修改過的數據寫到磁碟上。
說明: 可以將指定記憶體地址開始的數據寫在磁碟上,可以在沒有指定參數, 或指定地址參數的情況下,將調試檔案寫在磁碟上。
在運行W時需設定檔案的大小CX或BX暫存器
⑴把數據寫入磁碟的指定扇區
⑵把數據寫入指定檔案中
-W 起始地址
例A:\>DEBUG
-A
08f1:0100....
08F1: 012A....
-R CX
CX:0000
:2A←寫入位元組數,即為程式結尾地址減起始地址
-n tan.com←設定檔案名稱,需後綴為com
-w
Wring 002A bytes
-q
A:\>TAN←即可執行此程式
"XD"命令
* "XD"命令:釋放EMS記憶體
例:-XD 0001
handle 0001 deallocatel←釋放了
利用XD釋放後可再分配
"XM"命令
*"XM"命令;把
擴充記憶體上的記憶體頁區映射到主記憶體區
格式:XM RAM 長頁碼 主記憶體頁碼句柄
例:-XM3 2 0001←把0001號句柄的第3號邏輯頁區映射到2號真實頁區
Logical page 03 mapped to physical page 02
"XS"命令
*"XS"命令:顯示當前EMS使用情況。
格式 -XS
實際套用
⒈ 非物理0磁軌壞軟碟的修復
此種損壞從
軟碟盤面上來看並沒有明顯的劃傷和霉變。一般可以恢復其數據,也可使軟碟重新在利用。
處理方法如下:
Ⅰ. 進入debug
Ⅱ. 取一張引導區沒有損壞的好磁碟,插入軟碟機
-l 100 0 0 1
Ⅲ. 插入損壞的磁碟到軟碟機
-w 100 0 0 1
-q
注意:好盤與壞盤容量必須相同
⒉ 物理0磁軌壞軟碟中的數據讀取
對於0
磁軌損壞的磁碟,一般來說是應該拋棄了,當你也不妨試一試已下方法:
磁化處理:用較強的磁鐵在靠近壞磁碟的表面處反覆移動,切不可碰到磁碟介質,以免劃傷表面,然後在試試格式化。
軟碟換面:小心的將磁碟打開,堅磁片與金屬晶片分開,翻面後再按原來的方法粘在一起即可,在重新格式化。
diskfix:對於diskfix想必大家都用的比較多了,裡面的磁碟修復功能很好用的。能修復大多數磁碟表面錯誤。
⒊ 硬碟啟動失敗處理
在正常機上格式化一張軟碟,無其它數據
進入debug
-l 0 2 0 1
-w 0 0 0 1
-q
用系統盤啟動故障機後
在進入debug
-l 0 0 0 1
-w 0 2 0 1
-q
⒋ 軟碟不能正確讀取解決方法
如果使用軟碟時出現如下提示
general failure error reading drive a
可以用以下方法解決:
將一張好盤插入軟碟機
進入debug
-a 100
****:*100 mov al,0
****:**** mov cx,1
****:**** mov dx,0
****:**** mov bx,1000
****:**** int 25
****:**** int 20
回車
-g=0100
插入壞盤並進入debug
-a 200
****:*100 mov al,1
****:**** mov cx,1
****:**** mov dx,0
****:**** mov bx,1000
****:**** int 26
****:**** int 20
回車
-g=200
⒌ cmos 數據的保存,恢復
cmosram的’地址口’的口地址為 70h ’數據口’的口地址為 71h 讀取時只需將讀的cmosram的地址送到70h,隨後就可以從71 h中得到所需數據。
⑴讀取cmos數據 進入debug
-a 100
****:*100 mov bx,1000
****:**** mov cx,0040
****:**** mov ax,0000
****:0109 mov dx,cx
****:**** mov cx,0005
****:010e loop 010e
****:**** out 70,al
****:**** mov cx,0005
****:0115 loop 0115
****:**** in al,71
****:**** mov 【bx】,al
****:**** cmp ah,0e
****:**** jb 0123
****:**** add ah,80
****:0123 inc ah
****:**** inc bx
****:**** mov cx,dx
****:**** mov al,ah
****:**** loop 0109
****:**** mov ah,3c
****:**** mov dx,0150
****:**** mov cx,0020
****:**** int 21
****:**** mov bx,ax
****:**** mov dx,1000
****:**** mov cx,0040
****:**** mov ah,40
****:**** int 21
****:**** mov ah,4c
****:**** int 21
-a 150
****:0150 db "cmos.dat",0
****:0159
-r cx
cx 0000
:60
-n save cmos.com
-w
-q
-w 100 2 0 1
-q
⑵恢復cmos數據 進入debug
-a 100
****:*100 mov cx,0150
****:**** mov ah,3d
****:**** mov al,00
****:**** int 21
****:**** mov dx,1000
****:**** mov bx,ax
****:**** mov cx,0040
****:**** mov ah,3f
****:**** int 21
****:**** mov ax,0000
****:**** mov bx,dx
****:**** mov dx,cx
****:**** mov cx,0005
****:**** loop 011f
****:**** mov al,ah
****:**** out 70,al
****:**** mov cx,0005
****:**** loop 0128
****:**** mov al,【bx】
****:**** out 71,al
****:**** jb 0136
****:**** add ah,80
****:**** inc ah
****:**** inc bx
****:**** mov cx,dx
****:**** loop 011a
****:**** mov ax,0040
****:**** mov ds,ax
****:**** mov ax,1234
****:**** mov 【0072】,ax
****:**** jmp ffff:0000
-a 150
****:0150 db "cmos.dat",0
****:0159
-r cx
cx 0000
:60
-n write cmos.com
-w
-q
dos引導程式是被讀到記憶體0000:7c00初開始執行的
獲得正常的引導程式
進入debug
-l 100 2 0 1
-n a:dosboot.com
-r cx
:200
-w
-q
裝入引導程式
進入debug
-n a:dosboot.com
-l
-r cx
:200
-w 100 2 0 1
-q
⒎ 硬碟主引導扇區數據的保存與恢復
硬碟工作正常時讀取主引導扇區信息
保存主引導扇區數據進入debug
-a 100
mov ax,0201
mov bx,0110
mov cx,0001
mov dx,0080
int 13
int 3
-g=100
-e 102 3
-e 10e c3
-r bx
bx 0110
:0
-r cx
cx 0001
:210
-n a:rboot.com
-w
-q
恢復
主引導扇區數據:只需運行a盤的rboot.com
⒏ 硬碟非分配表備份與恢復
計算機運行正常時分配表備份
進入debug
-l 100 2 0 1
-n a:dbrup.dat
-r cx
:200
-w
恢復
進入debug
-n a:dbrup.dat
-l
-w 100 2 0 1
-q
⒐ 硬碟保護卡內幕
對於經常在外邊上機的人來說,
計算機維護人員一旦設定硬碟保護卡,自己作一些事來特別麻煩,想不想禁止掉硬碟保護卡,用以下方法或許可以借鑑:
進入debug
-a 100
mov ah,0
mov dl,0
int 13
-t
一直按t知道找到 cs=f000 記下此時 ds 的值 如:1234
-e e0:4c
34 12 00 f0
-q
⒑ 用debug作硬碟低級格式化
硬碟
低級格式化一般用dm,但debug也可以低級格式化硬碟
進入debug
-a 100
mov ax,500
mov bx,180
mov cx,0
mov dx,80
int 13
int 3
-e 180 0 0 0 2
-q
⒒ 冷啟動與熱啟動
用debug實現系統冷啟動與熱啟動程式
冷啟動:
-a 100
jmp ffff:0
int 20
-n a:reset.com
-r cx
:0007
-w
-q
熱啟動:
-a 100
mov ax,0040
mov ds,ax
mov ax,1234
mov si,0072
mov (si),ax
jmp ffff:0
-n a:rset.com
-r cx
:0014
-w
-q
⒓ dos內部命令加密
如加密 dir
編輯該檔案
pctools中:f-----f1 然後找所有03 44 49 52 找到後按f5修改成你所要的值 如:foo 以後只有輸入foo 才能列出檔案或檔案目錄。
diskfix 有良好的界面,操作起來和pctools差不多。
注意:如果不能修改,則解開檔案的鎖定 luck
其它命令代碼
type 04 54 59 50 45
cd 02 43 44
del 03 44 45 44
copy 04 43 49 50 59