1. 程式人生 > 其它 >預備知識 debug

預備知識 debug

什麼是debug?

debug 是DOS、windows都提供的實模擬程式的除錯工具。使用它,可以檢視CPU各種暫存器中的內容、記憶體的情況和在機器碼級跟蹤程式的執行

用到的debug功能

常用:

1 R:檢視、改變CPU暫存器的內容
2 D:檢視記憶體中的內容
3 E:改寫記憶體中的內容
4 U:將記憶體中的機器指令翻譯成彙編指令
5 T:執行一條機器指令
6 A:以彙編指令的格式在記憶體中寫入一條機器指令

注意:這裡關注的是記憶體單元而非單元中的內容。打個比方:一堆各色的小球要放到對應顏色的房子裡,在把小球拿到房子裡之前要先查詢房子的位置,這裡不能拿著小球去找房子,找到房子之後把小球拿過去。還有小球中可以存放字條,字條上可以寫入內容等其餘的操作還在學習。

所有

百度百科中可以查到更詳細的解釋

R:檢視、改變CPU暫存器的內容

注意CS和IP的值,CS=073F,IP=0100,也就是記憶體073F:0100處的指令為CPU當前要讀取、執行的指令。在所有暫存器的下方,debug還列出了CS:IP所指向的記憶體單元處所存放的機器碼,並將它翻譯成為彙編指令。可以看到,CS:IP所指向的記憶體單元為073F:0100,此處存放的機器碼為0000,對應的彙編指令為add [BX+SI],AL

D:檢視記憶體中的內容

檢視記憶體5000H處的內容,可以使用【d 段地址:偏移地址】 ,debug將列出從指定記憶體單元開始的128個記憶體單元的內容

注:我們看到的記憶體中的內容,在不同的計算機中是不一樣的,也可能每次用debug看到的內容都不相同,因為我們用debug看到的都是原來就在記憶體中的內容,這些內容受隨時都有可能變化的系統環境的影響,當然也可以改變記憶體、暫存器中的內容

輸出的三部分內容

一、左
    每行的起始地址
二、中
    從指定地址開始128個記憶體單元的內容,用十六進位制格式輸出,每行輸出16的整數倍的地址開始,最多輸出16個單元的內容。從圖中我可以知道,記憶體500:0單元中的內容是06H,記憶體500:20單元中的內容是07H
  每行中的【-】是用來分割的,前後分為各8個單元
三、右
  每個記憶體單元中的資料對應的可顯示的ASCII碼字元,沒有對應的ASCII字元時,debug會用【.】來代替

E:修改記憶體單元的內容

使用e命令修改單元的內容

一、e 1000:0 5 1 2 3 4 5 修改一段

二、e 1000:0 單個修改

單個修改的時候單擊回車修改結束,單擊空格修改下一個

三、e 1000:0 5 E 'E' 'E' E E 向記憶體中寫入字元

U:將記憶體中的機器碼轉換為彙編指令

u 1000:0 從1000:0開始轉換為彙編指令

輸出分為3個部分,每一條機器指令的地址、機器指令、機器指令所對應的彙編指令

機器指令的地址 機器指令  機器指令對應的彙編指令

T:逐條跟蹤程式的執行,每條指令執行後都將顯示各暫存器的內容

可以通過e命令寫入指令太麻煩了懶得細看,跳過

通過t可以執行寫入的指令

A:將指令直接彙編成機器碼輸入到記憶體中