西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識 → win7下debug常用命令

win7下debug常用命令

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/5/12 21:28:09字體大小:A-A+

作者:西西點擊:828次評論:0次標(biāo)簽: debug

  • 類型:編程輔助大。1.8M語言:英文 評分:6.0
  • 標(biāo)簽:
立即下載

debug命令用于調(diào)試匯編語言程序,能使用戶接觸到計算機內(nèi)部,允許用戶直接觀察和修改CPU的寄存器;能觀察、修改內(nèi)存單元;允許直接輸入機器指令并單步執(zhí)行;能反匯編程序。概述講,debug是觀察和了解計算機內(nèi)部運行情況的有利助手。

選擇"運行"選項--在彈出的運行框里輸入“debug”確定后彈出debug調(diào)試窗口。

彈出debug調(diào)試窗口中,輸入下列相關(guān)命令進行操作

1 輸入debug命令

在win7的命令行中輸入debug,就進入到虛擬8086的執(zhí)行環(huán)境了。也可以輸入debug + 程序名字,這就是對某個程序進行調(diào)試。

2 r(register)命令

從名字可以看出是對寄存器操作的命令,此指令有兩個功能:一是顯示所以寄存器和標(biāo)記的內(nèi)容,二是修改寄存器的內(nèi)容。只輸入r來顯示寄存器的內(nèi)容:

debug總共顯示3行,最底下一行是debug正要執(zhí)行的命令,即cs:ip指向的命令。第一行和第二行顯示了各個寄存器的值,其中第二行的最后表示的是標(biāo)志寄存器中的值,從左到右分別為:溢出標(biāo)志:ov(溢出),nv(未溢出);方向標(biāo)志:dn(減),up(曾);中斷標(biāo)志:ei(啟用),di(禁用);正負標(biāo)志:ng(負),pl(正);零標(biāo)志:zr(為零),nz(不為0);輔助進位標(biāo)志:ac(進位),na(未進位);奇偶校驗標(biāo)志:pe(偶校驗),po(奇校驗);進位標(biāo)志:cy(進位),nc(未進位)。

如果想修改某個寄存器的值,直接在r后面加上要修改寄存器的名字,如:r ax ,然后回車并輸入修改的值再回車就可以了。

從上圖可以看出ax的值確實改變了,不但可以改變ax的值,其它寄存器的值都可以改變,包括cs,ip的值,這是在匯編程序中所做不到的。

3 d(dump)命令查看內(nèi)存中的信息

如果想知道10000h內(nèi)存中的信息,可以用”d 段地址:段偏移地址“來查看:

使用”d 段地址:段偏移地址“的格式,debug會列出從指定內(nèi)存單元開始的128個內(nèi)存單元的內(nèi)容。如上圖所示,在使用d 1000:0 后,debug列出了1000:0-1000:7f中的內(nèi)容。

在使用”d 段地址:段偏移地址“之后,接著使用d命令,可列出后續(xù)的內(nèi)容,如下圖所示:

也可以用指定d命令的查看范圍,此時采用”d 段起始地址:起始偏移地址 結(jié)尾偏移地址“的格式。比如要查看1000:0-1000:9中的內(nèi)容,可以用“d 1000:0 9”實現(xiàn),如下圖所示:

4 e(edit)命令改寫內(nèi)存中的內(nèi)容

可以用“e 起始地址 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù)...”的格式來修改從起始地址開始的內(nèi)存中的內(nèi)容。比如修改10000h開始的10個單元的內(nèi)容,如下圖:

也可以用e命令以提問的方式來逐個地修改從某一地址開始的內(nèi)存單元中的內(nèi)容,以從1000:10單元開始為例,步驟如下:

輸入e 1000:10,按enter鍵

debug顯示起始地址1000:0010,和第一個單元的原始內(nèi)容:00,然后光標(biāo)停在“.”后面提示輸入想要寫入的數(shù)據(jù),此時有兩種選擇:一是輸入數(shù)據(jù),然后按空格鍵,即輸入數(shù)據(jù)修改當(dāng)前的內(nèi)存單元;二位不輸入數(shù)據(jù),直接按空格鍵,則不對當(dāng)前內(nèi)存單元進行改寫。

當(dāng)前單元處理完后(不論改寫或者沒有改寫,只要按了空格鍵,就表示處理完成),debug將顯示下一個內(nèi)存單元的原始內(nèi)容,并提示修改。

所以希望改寫的內(nèi)存單元改寫完成后,按enter鍵,e命令操作結(jié)束。

如下圖所示:

也可以用e命令向內(nèi)存單元寫入字符串,比如用e命令從內(nèi)存1000:0開始寫入:1、“a+b”、2、“c++”、‘3’、“IBM”,如下圖所示:

也可以向內(nèi)存張寫入機器碼。

5 用u(un-assembly)來反匯編機器碼

我們首先用e命令從內(nèi)存1000:0單元開始寫入這樣一段機器碼:

機器碼                             對應(yīng)匯編指令

b80100mov ax, 0001

b90200                            mov cs, 0002

01c8  add ax, cx

然后用u命令反匯編出這段內(nèi)存中的匯編命令,如下圖所示:

6 t(trace)單步調(diào)試命令

沒輸入一個t,debug就執(zhí)行一條指令,然后停下了顯示所有寄存器的內(nèi)容。如下圖所示:

7 a(assembly)命令以匯編指令形式寫指令到內(nèi)存中

前面說過可以用e命令寫入機器碼,但這樣很不方便,必須記住機器碼才行,而a命令以匯編形式寫入就方便多了,“a 起始地址“表示將匯編指令寫入某個地址中,如下圖:

8 n(name)命令

指定 debug l(加載)或 w(寫入)命令的可執(zhí)行文件的名稱,或者指定正在調(diào)試的可執(zhí)行文件的參數(shù)。
n [drive:][path] filename 
要指定測試的可執(zhí)行文件的參數(shù),請使用以下語法:
n file-parameters

9 l(load)命令

l命令將n命令指定的可執(zhí)行文件加載到內(nèi)存的某個地址中。
要從磁盤文件加載 BX:CX 寄存器中指定的字節(jié)數(shù)內(nèi)容,請使用以下語法:
l [address] 
要略過 Windows 2000 文件系統(tǒng)并直接加載特定的扇區(qū),請使用以下語法:
l address drive start number
不過我在win7中試了第一個語法,debug居然報錯,不知道為什么,只有用不帶參數(shù)的l命令才行。如下圖所示:

也就是說加載文件只能加載到開始進入debug時cs:ip所指向的起始內(nèi)存單元中去。但是在網(wǎng)上找了很多資料,都說可以直接加載到一個指定的地址中去,不知道為什么不行?

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)