線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4566
推到 Plurk!
推到 Facebook!

Debug 資料大全

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-09 15:24:36 IP:61.221.xxx.xxx 未訂閱
此為轉貼資料 http://depos.patching.net/showart.asp?art_id=114&cat_id=5 Debug 資料大全 Debug-PC之開山老祖 Debug 原意是殺蟲子。這裏是機器調試工具。 其實,Debug的由來,還有一則趣聞,在早期美國的一電腦房中,科學家正在緊張的工作。同時,許多台大型的電腦也在不停的運行著。大概是由於機器過熱,引來許的小蟲子,以至於,電腦無法正常運行。科學們,只好停下來,捉蟲子...蟲子捉完了,電腦運行也正常了,後來,這個名詞就沿用至今了.... 雖然,現在好的軟體越來越多了,但是有些,我們只需動手,用Debug就可解決,且快而好!接下來,我們就一起學習Debug在各方面的運用吧!(在殺毒、加解密、系統...)下面我和大家一起學習一些,Debug的用法,雖然,現在好的軟體越來越多了,但是有些,我們只需動手,用Debug就可解決,且快而好! Debug常用命令集 名稱 解釋 格式 a (Assemble) 逐行彙編 a [address] c (Compare) 比較兩記憶體塊 c range address d (Dump) 記憶體16進制顯示 d [address]或 d [range] e (Enter) 修改記憶體位元組 e address [list] f (fin) 預置一段記憶體 f range list g (Go) 執行程式 g [=address][address...] h (Hexavithmetic) 制算術運算 h value value i (Input) 從指定埠地址輸入 i pataddress l (Load) 讀盤 l [address [driver seetor] m (Move) 記憶體塊傳送 m range address n (Name) 置檔案名 n filespec [filespec...] o (Output) 從指定埠地址輸出 o portadress byte q (Quit) 結束 q r (Register) 顯示和修改寄存器 r [register name] s (Search) 查找位元組串 s range list t (Trace) 跟蹤執行 t [=address] [value] u (Unassemble) 反彙編 u [address ]或range w (Write) 存檔 w [address[driver sector secnum] ? 聯機幫助 ? debug小彙編a命令 debug小彙編a命令是一個很有用的功能,許多的小程式都要他來做。 編一些小程式比彙編要來得方便,快潔。 在Debug中,中斷是非常有用的,首先,讓我們先瞭解一下中斷。 所謂中斷,其實,就是,當你做某事時,有人過來找你有其他事,你先放下手中的事(電腦中,稱?保護現場) ,再去與叫你的那個人辦事去,等完了,你又回,接著做剛才的事。這是個很通俗的講法。 電腦在運行時,也會出現這種情況,我們叫之中斷。 下面是他的一些常用中斷向量的入口值詳解:(記住哦,很用的...呵呵) IBM PC 中斷 int10 ooH 螢幕方式設置 入口:AH=0,AL=顯示方式代碼(0--6) 0:40*25 黑白 1:40*25 彩色 2:80*25 黑白 3:80*25 彩色文本 4:320*200 彩色 5:320*200 黑白 6:640*200 黑白圖形模式 7:80*25 單色字元(單色顯示器) 0BH 色彩設置 入口:AH=0B,BL=0 設背景色,BH=0--15 BL=1 設調色碼,BH=0--1 0CH 寫圖形點 入口:AH=0C,CX:DX=列號:行號,AL=?色 ODH 讀圖形點 入口:AH=0D,CX:DX=列號:行號 返回:AL=?色 0EH 在當前頁、當前游標處寫字元 入口:AH=0E,AL=字元的ASCII碼,BL=前景色 OFH 顯示器狀態 入口:AH=0F 返回:AL=當前顯示器方式,AH=螢幕列數,BH=當前頁號 01H 游標設置 入口:AH=1,CH=游標起始行號(00--0C),CL=游標結束行號(00--0C) 注:CH > CL 02H 游標定位 入口:AH=2,BH=頁號,DH:DL=起始行:列 03H 讀游標位置 入口:AH=3,BH=頁號。 返回:DH:DL=起始行:列 06H 窗口上卷 入品:AH=6,AL=窗口上卷行數,CH:CL-DH:DL 窗口座標 注:AL=0 卷動整個窗口 07H 窗口下卷 入口:AH=7,AL=窗口下卷行數,CH:CL-DH:DL 窗口座標 08H 讀當前游標處字元和屬性 入口:AH=8,BH=頁號。 返回:AH:AL=字元的?色:字元的ASCII碼 注:?色代碼見下對照表 09H:在當前游標處寫字元和屬性 注:游標不下移 入口:AH=9,BH=頁號,BL:AL=字元的?色:字元的ASCII碼,CX=重復次數 1 2 3 4 5 6 7 8 BL R G B I R G B 閃爍 字元底色 加亮 字元?色 中斷向量號表 中斷號 解釋 中斷號 解釋 0 除數?0錯 19 引導裝入程式 1 音步中斷 1A 日時調用 2 不可遮罩中斷NMI 1B 鍵盤阻斷時得到控制權 3 斷電中斷(CCH) 1C 時鐘中斷時得到控制權 4 溢出中斷 1D 指向CRT初始參數表 5 螢幕列印中斷 1E 指向盒帶參數表 6-7 保留 1F 1KB圖形模式 8 計時器中斷(18.2秒) 20 結束DOS程式 9 鍵盤中斷 21 DOS功能調用 A-D 保留 22 結束地址(建義用EXEC) E 軟碟機中斷 23 DOS Crtl-Break退出地址 F 保留 24 DOS致命錯向量 10 螢幕I/O調用 25 DOS絕對磁片讀 11 設備檢查調用 26 DOS絕對磁片寫 12 記憶體檢查調用 27 結束程式並駐留(建義用31h) 13 軟碟機I/O調用 28-3F DOS保留 14 RS-233I/O調用 40-7F 未用 15 盒帶機I/O調用 80-85 BASIC保留 16 鍵盤I/O調用 86-F0 BASIC解釋程式用 17 印表機I/O調用 F1-FF 未用 18 ROM-BASIC入口 指令名詳解 call 指令(程序呼叫)(控制指令-長轉移) 詳解: 段內直接調用 段內間接調用(寄存器) 段內間接調用(記憶體) 段間直接調用 段間間接調用 指令名 jmp 指令(無條件轉移指令)(控制指令-長轉移) 詳解: 段內直接跳轉 短段內直接跳轉 段內間接跳轉(寄存器) 段內間接跳轉(記憶體) 段間直接跳轉 段間間接跳轉 指令名 ret 指令(過程返回)(控制指令-長轉移) 詳解: 段內返回 段內返回立即數加於sp 段間返回 段間返回立即數加於sp na/jnbe 指令(控制指令-短轉移) 不小於或不等於時轉移 jae/jnb 指令 (控制指令-短轉移) 大於或等於時轉移 jb/jnae 指令 (控制指令-短轉移) 小於轉移 jbe/jna 指令 (控制指令-短轉移) 小於或等 於轉移 jg/jnle 指令(控制指令-短轉移) 大於轉移 jge/jnl 指令 (控制指令-短轉移) 大於或等於轉移 jl/jnge 指令 (控制指令-短轉移) 小於轉移 jle/jng 指令 (控制指令-短轉移) 小於或等 於轉移 je/jz 指令 (控制指令-短轉移) 等於轉移 jne/jnz 指令 (控制指令-短轉移) 不等於轉移 jc 指令 (控制指令-短轉移) 有進位時轉移 jnc 指令 (控制指令-短轉移) 列進位時轉移 jno 指令 (控制指令-短轉移) 不溢出時轉移 jnp/jpo 指令 (控制指令-短轉移) 奇偶性?奇數時轉移 jns 指令 (控制指令-短轉移) 符號位元?"0"轉移 jo 指令 (控制指令-短轉移) 溢出轉移 jp/jpe 指令 (控制指令-短轉移) 奇偶性?偶數時轉移 js 指令 (控制指令-短轉移) 符號位元?"1"時轉移 loop 指令 (迴圈控制指令-短轉移) cx 不?0時迴圈 loope/loopz 指令 (迴圈控制指令-短轉移) cx 不?0且標誌 z=1 時迴圈 loopne/loopnz 指令 (迴圈控制指令-短轉移) cx 不?0且標誌 z=0 時迴圈 jcxz 指令 (迴圈控制指令-短轉移) cx ?0時轉移 ★int 指令 (中斷指令) 中斷指令(後詳解) into 指令 (中斷指令) 溢出中斷 iret 指令 (中斷指令) 中斷返回 指令名 shl 指令(邏輯左移) sal 指令(算術左移) shr 指令(邏輯右移) sar 指令(算術右移) 寄存器,1 rol 指令(迴圈左移) 寄存器,cl ror 指令(迴圈右移) 記憶體,1 rcl 指令(通過進位元的迴圈左移)記憶體,cl rcr 指令(通過進位元的迴圈右移)(邏輯運算) not 指令(取反運算)寄存器求反 (邏輯運算)記憶體求反 and 指令(與運算) (邏輯運算) 寄存器 and 寄存器 寄存器 寄存器 and 記憶體 寄存器 記憶體 and 寄存器 記憶體 立即數 and 記憶體 記憶體 立即數 and 累加器 累加器 or 指令(或運算)(邏輯運算) 寄存器 or 寄存器 寄存器 寄存器 or 記憶體 寄存器 記憶體 or 寄存器 記憶體 立即數 or 記憶體 記憶體 立即數 or 累加器 累加器 test 指令(測試) (邏輯運算) 寄存器 test 寄存器 寄存器 test 記憶體 寄存器 test 立即數 記憶體 test 立即數 累加器 test 立即數 movs 指令(串傳送)(字串操作指令) 單個傳送 重復傳送 cmps 指令(串比較) (字串操作指令) 單個比較 重復比較 scas 指令(串掃描)(字串操作指令) 單個搜索 重復搜索 lods 指令(裝入串) (字串操作指令) 單個裝載 重復裝載 stos 指令(保存串) (字串操作指令) 單個存儲 重復存儲 mov 指令(傳送字或位元組)(資料傳送命令) 寄存器與寄存器間傳送 記憶體與寄存器間傳送 立即數傳送給記憶體 立即數傳送給寄存器 記憶體傳送給累加器 累加器傳送記憶體 寄存器傳送給段寄存器 記憶體傳送給段寄存器 段寄存器傳送給寄存器 段寄存器傳送給存記憶體 pop 指令(把字彈出堆疊) (資料傳送命令) push 指令(把字壓入堆疊) 記憶體 寄存器 段寄器 xchg 指令(交換字或位元組) (資料傳送命令) 寄存器與寄存器交換 記憶體與寄存器交換 寄存器與累加器交換 in 指令(埠輸入) (資料傳送命令) 直接輸入 間接輸入 out 指令(埠輸出) (資料傳送指令) 直接輸出 間接輸出 add 指令(加法)(算術指令) adc 指令(帶進位元加法) 寄存器+寄存器 寄存器 寄存器+記憶體 寄存器 記憶體+寄存器 記憶體 立即數+記憶體 記憶體 立即數+累加器 累加器 inc 指令(加1)(算術指令) 記憶體增量 寄存器增量 sub 指令(減法) (算術指令) sbb 指令(帶借位減法) 寄存器-寄存器 寄存器 寄存器-記憶體 寄存器 記憶體-寄存器 記憶體 立即數-記憶體 記憶體 立即數-累加器 累加器 dec 指令(減1)(算術指令) 記憶體減量 寄存器減量 nec 指令(求反,以0減之) 寄存器求補 記憶體求補 cmp 指令(比較)(算術指令) 寄存器與寄存器比較 寄存器與記憶體比較 寄存器與立即數比較 記憶體與立即數比較 累加器與立即數比較 mul 指令(無符號乘法) (算術指令) imul 指令(整數乘法) 與8位寄存器相乘 與16位寄存器相乘 與8位元存儲單元相乘 與16位元存儲單元相乘 div 指令(無符號除法)(算術指令) idiv 指令(整數除法) 被8位寄存器除 被16位寄存器除 被8位元存儲單元除 被16位元存儲單元除 Debug實戰 1.查看主板的生?日期,版本 D ffff:05 D fe00:0e 2.類比Rest鍵功能 A :100 jmp ffff:0000 :105 g 3.快速格式化軟碟 L 100 0 0 * 插入一張己格式化軟碟 W 100 0 0 * 放入一張欲格式化軟碟 注:* 分別?:720K e |1.2M id |1.44M 21 4.硬碟格式化兩種方法 (1)G=c800:05 (2) A 100 mov ax,0703 mov cx,0001 mov dx,0080 int 13 int 3 g 100 5.加速鍵盤 A mov ax,0305 mov bx,0000 int 16 int 20 rcx 10 n fast.com w q 6.關閉顯示器(恢復時,按任意鍵) A mov ax,1201 mov bl,36 int 10 mov ah,0 int 16 mov ax,1200 int 10 rcx 10 n crt-of.com w q 7.硬碟DOS引導記錄的修復 在軟盤機中放入一張己格式化軟碟 debug -l 100 2 0 1 -w 100 0 50 1 把軟碟放入故障機軟盤機中 debug -l 100 0 50 1 -w 100 2 0 1 -q 8.清coms中setup口令 debug -a mov bx,0038 mov cx,0000 mov ax,bx out 70,al inc cx cmp cx,0006 jnz 0106 int 20 -rcx :20 -nclearpassword.com -w -q 注:以上適合super與dtk機,對於ast機,因?他的口令放在coms的4ch-51h地址處,只要將:mov bx,0038 改?: mov bx,004c即可 9.取消coms的密碼(將coms資料清?初始化) -o 70,10 -o 71,10 -g -q 10.將硬碟主引導記錄保存到文件中 debug -a mov ax,0201 mov bx,0200 mov cx,0001 mov dx,0080 mov int 13 int 3 -rcx :200 -nboot.dat -w -q 11.調用中斷實現重?電腦(可以成文件) debug -a int 19 int 20 -rcx :2 -nreset.com -w -q DEBUG主要命令 DEBUG是?組合語言設計的一種高度工具,它通過單步、設置中斷點等方式?組合語言程式師提供了非常有效的調試手段。 一、DEBUG程式的調用 在DOS的提示符下,可鍵入命令: C:\DEBUG [D:][PATH][FILENAME[.EXT][PARM1][PARM2] 其中,檔案名是被調試文件的名字。如用戶鍵入文件,則DEBUG將指定的文件裝入記憶體中,用戶可對其進行調試。如果未鍵入檔案名,則用戶可以用當前記憶體的內容工作,或者用DEBUG命令N和L把需要的文件裝入記憶體後再進行調試。命令中的D指定驅動器PATH?路徑,PARM1和PARM2則?運行被調試文件時所需要的命令參數。 在DEBUG程式調入後,將出現提示符,此時就可用DEBUG命令來調試程式。 二、DEBUG的主要命令 1、顯示存儲單元的命令D(DUMP),格式?: _D[address]或_D[range] 例如,按指定範圍顯示存儲單元內容的方法?: -d100 120 18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G...8.G.....G... 18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ..;..h..M PQVW. 7 18E4:0120 8B 其中0100至0120是DEBUG顯示的單元內容,左邊用十六進位表示每個位元組,右邊用ASCII字元表示每個位元組,·表示不可顯示的字元。這裏沒有指定段位址,D命令自動顯示DS段的內容。如果只指定首位址,則顯示從首位址開始的80個位元組的內容。如果完全沒有指定位址,則顯示上一個D命令顯示的最後一個單元後的內容。 2、修改存儲單元內容的命令有兩種。 ·輸入命令E(ENTER),有兩種格式如下:第一種格式可以用給定的內容表來替代指定範圍的存儲單元內容。命令格式?: -E address [list] 例如,-E DS:100 F3XYZ8D 其中F3,X,Y,Z和各占一個位元組,該命令可以用這五個位元組來替代存儲單元DS:0100到0104的原先的內容。 第二種格式則是採用逐個單元相繼修改的方法。命令格式?: -E address 例如,-E DS:100 則可能顯示?: 18E4:0100 89.- 如果需要把該單元的內容修改?78,則用戶可以直接鍵入78,再按"空格"鍵可接著顯示下一個單元的內容,如下: 18E4:0100 89.78 1B.- 這樣,用戶可以不斷修改相繼單元的內容,直到用ENTER鍵結束該命令?止。 ·填寫命令F(FILL),其格式?: -F range list 例如:-F 4BA:0100 5 F3XYZ8D 使04BA:0100~0104單元包含指定的五個位元組的內容。如果list中的位元組數超過指定的範圍,則忽略超過的項;如果list的位元組數小於指定的範圍,則重復使用list填入,直到填滿指定的所有單元?止。 3)檢查和修改寄存器內容的命令R(register),它有三種格式如下: ·顯示CPU內所有寄存器內容和標誌位元狀態,其格式?: -R 例如,-r AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC 18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000 ·顯示和修改某個寄存器內容,其格式?: -R register name 例如,鍵入 -R AX 系統將回應如下: AX F1F4 : 即AX寄存器的當前內容?F1F4,如不修改則按ENTER鍵,否則,可鍵入欲修改的內容,如: -R bx BX 0369 :059F 則把BX寄存器的內容修改?059F。 ·顯示和修改標誌位元狀態,命令格式?: -RF系統將回應,如: OV DN EI NG ZR AC PE CY- 此時,如不修改其內容可按ENTER鍵,否則,可鍵入欲修改的內容,如: OV DN EI NG ZR AC PE CY-PONZDINV 即可,可見鍵入的順序可以是任意的。 4)運行命令G,其格式?: -G[=address1][address2[address3…] 其中,地址1指定了運行的起始地址,如不指定則從當前的CS:IP開始運行。後面的位址均?中斷點位址,當指令執行到中斷點時,就停止執行並顯示當前所有寄存器及標誌位元的內容,和下一條將要執行的指令。 5)跟蹤命令T(Trace),有兩種格式: ·逐條指令跟蹤 -T [=address] 從指定位址起執行一條指令後停下來,顯示所有寄存器內容及標誌位元的值。如未指定地址則從當前的CS:IP開始執行。 ·多條指令跟蹤 -T [=address][value] 從指定位址起執行n條指令後停下來,n由value指定。 6)彙編命令A(Assemble),其格式?: -A[address] 該命令允許鍵入組合語言語句,並能把它們彙編成機器代碼,相繼地存放在從指定位址開始的存儲區中。必須注意:DEBUG把鍵入的數位均看成十六進位數,所以如要鍵入十進位數字,則其後應加以說明,如100D。 7)反彙編命令U(Unassemble)有兩種格式。 ·從指定位址開始,反彙編32個位元組,其格式?: -U[address] 例如: -u100 18E4:0100 C70604023801 MOV WORD PTR[0204],0138 18E4:0106 C70606020002 MOV WORD PTR[0206],0200 18E4:010C C70606020202 MOV WORD PTR[0208],0202 18E4:0112 BBO4O2 MOV BX,0204 18E4:0115 E80200 CALL 011A 18E4:0118 CD20 INT 20 18E4:011A 50 PUSH AX 18E4:011B 51 PUSH CX 18E4:011C 56 PUSH SI 18E4:011D 57 PUSH DI 18E4:011E 8B37 MOV SI,[BX] 如果位址被省略,則從上一個U命令的最後一條指令的下一個單元開始顯示32個位元組。 ·對指定範圍內的存儲單元進行反彙編,格式?: -U[range] 例如: -u100 10c 18E4:0100 C70604023801 MOV WORD PTR[0204],0138 18E4:0106 C70606020002 MOV WORD PTR[0206],0200 18E4:010C C70606020202 MOV WORD PTR[0208],0202 或 -u100 112 18E4:0100 C70604023801 MOV WORD PTR[0204],0138 18E4:0106 C70606020002 MOV WORD PTR[0206],0200 18E4:010C C70606020202 MOV WORD PTR[0208],0202 可見這兩種格式是等效的。 8)命名命令N(Name),其格式?: -N filespecs [filespecs] 命令把兩個文件識別字格式化在CS:5CH和CS:6CH的兩個文件控制塊中,以便在其後用L或W命令把文件裝入存檔。filespecs的格式可以是: [d:][path] filename[.ext] 例如, -N myprog -L - 可把文件myprog裝入記憶體。 9)裝入命令(Load),有兩種功能。 ·把磁片上指定磁區範圍的內容裝入到記憶體從指定位址開始的區域中。其格式?: -L[address[drive sector sector] ·裝入指定文件,其格式?: -L[address] 此命令裝入已在CS:5CH中格式化了文件控制塊所指定的文件。如未指定地址,則裝入CS:0100開始的存儲區中。 10)寫命令W(Write),有兩種功能。 ·把資料寫入磁片的指定磁區。其格式?: -W address drive sector sector ·把資料寫入指定的文件中。其格式?: -W[address] 此命令把指定的存儲區中的資料寫入由CS:5CH處的文件控制塊所指定的文件中。如未指定位址則資料從CS:0100開始。要寫入文件的位元組數應先放入BX和CX中。 11)退出DEBUG命令Q(Quit),其格式?: -Q 它退出DEBUG,返回DOS。本命令並無存檔功能,如需存檔應先使用W命令。 問題:初學者問一個低級問題,執行debug-a後,如果有一行輸入錯誤,如何更改這一行? 回答: 加入進行如下輸入: D:\PWIN95\Desktop>debug -a 2129:0100movax,200 2129:0103movbx,200 2129:0106movcx,200 2129:0109 此時,發現movbx,200一句錯誤,應?movbx,20,可以敲回車返回"-"狀態,然後輸入: -a103 212 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
系統時間:2024-11-21 19:52:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!