debug命令參考

debug命令用於調試彙編語言程序,能使用戶接觸到計算機內部,允許用戶直接觀察和修改CPU的寄存器;能觀察、修改內存單元;允許直接輸入機器指令並單步執行;能反彙編程序。概述講,debug是觀察和了解計算機內部運行情況的有利助手。

1 輸入debug命令
在win7的命令行中輸入debug,就進入到虛擬8086的執行環境了。也可以輸入debug + 程序名字,這就是對某個程序進行調試。

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


debug總共顯示3行,最底下一行是debug正要執行的命令,即cs:ip指向的命令。第一行和第二行顯示了各個寄存器的值,其中第二行的最後表示的是標誌寄存器中的值,從左到右分別爲:溢出標誌:ov(溢出),nv(未溢出);方向標誌:dn(減),up(曾);中斷標誌:ei(啓用),di(禁用);正負標誌:ng(負),pl(正);零標誌:zr(爲零),nz(不爲0);輔助進位標誌:ac(進位),na(未進位);奇偶校驗標誌:pe(偶校驗),po(奇校驗);進位標誌:cy(進位),nc(未進位)。
如果想修改某個寄存器的值,直接在r後面加上要修改寄存器的名字,如:r ax ,然後回車並輸入修改的值再回車就可以了。


從上圖可以看出ax的值確實改變了,不但可以改變ax的值,其它寄存器的值都可以改變,包括cs,ip的值,這是在彙編程序中所做不到的。
3 d(dump)命令查看內存中的信息
如果想知道10000h內存中的信息,可以用”d 段地址:段偏移地址“來查看:


使用”d 段地址:段偏移地址“的格式,debug會列出從指定內存單元開始的128個內存單元的內容。如上圖所示,在使用d 1000:0 後,debug列出了1000:0-1000:7f中的內容。
在使用”d 段地址:段偏移地址“之後,接着使用d命令,可列出後續的內容,如下圖所示:


也可以用指定d命令的查看範圍,此時採用”d 段起始地址:起始偏移地址 結尾偏移地址“的格式。比如要查看1000:0-1000:9中的內容,可以用“d 1000:0 9”實現,如下圖所示:


4 e(edit)命令改寫內存中的內容
可以用“e 起始地址 數據 數據 數據...”的格式來修改從起始地址開始的內存中的內容。比如修改10000h開始的10個單元的內容,如下圖:


也可以用e命令以提問的方式來逐個地修改從某一地址開始的內存單元中的內容,以從1000:10單元開始爲例,步驟如下:
輸入e 1000:10,按enter鍵
debug顯示起始地址1000:0010,和第一個單元的原始內容:00,然後光標停在“.”後面提示輸入想要寫入的數據,此時有兩種選擇:一是輸入數據,然後按空格鍵,即輸入數據修改當前的內存單元;二位不輸入數據,直接按空格鍵,則不對當前內存單元進行改寫。
當前單元處理完後(不論改寫或者沒有改寫,只要按了空格鍵,就表示處理完成),debug將顯示下一個內存單元的原始內容,並提示修改。
所以希望改寫的內存單元改寫完成後,按enter鍵,e命令操作結束。
如下圖所示:


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


5 用u(un-assembly)來反彙編機器碼
我們首先用e命令從內存1000:0單元開始寫入這樣一段機器碼:
機器碼 對應彙編指令
b80100 mov ax, 0001
b90200 mov cs, 0002
01c8   add ax, cx
然後用u命令反彙編出這段內存中的彙編命令,如下圖所示:


6 t(trace)單步調試命令
每輸入一個t,debug就執行一條指令,然後停下了顯示所有寄存器的內容。如下圖所示:


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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章