DEBUG中G命令是用來執行代碼的,其語法是“g [=address] [breakpoints]”,該命令后面可以跟地址和斷點,運行到內存指定位置的代碼后暫停,如果不加參數默認是從當前IP運行到程序結束。
DEBUG 中G命令是用來執行代碼的。該命令后面可以跟地址和斷點,即格式為?g [=address] [breakpoints],運行到內存指定位置的代碼后暫停,如果不加參數默認是從當前IP運行到程序結束。
debug g命令語法
g?[=address]?[breakpoints]
參數:
address,對于當前位于存儲器中的程序,指定它開始運行的地址。
breakpoints,指定可以設置為 g 子命令的一部分的 1 到 10 個臨時斷點。
?,顯示 debug 子命令列表。
注釋:
Windows XP 不使用該命令。使用它只是為了與 MS-DOS 文件兼容。
指定有效的 address 項,Address 是一個包含字母段記錄的二位名稱或一個四位字段地址加上一個偏移量。可以忽略段寄存器或段地址。
CS 是下列“調試”子命令的默認段:a、g、l、t、u 和 w。所有其它命令的默認段是 DS。所有數值均為十六進制格式。段名和偏移量之間必須包含冒號。有效地址如下:
CS:0100 04BA:0100
使用 address 參數
必須在 address 參數之前使用等號 (=),以區分 address 和斷點地址 (breakpoints)。
指定斷點
不論在 breakpoint 列表的什么位置鍵入斷點,程序都將在第一個斷點處停止。Debug.exe 在每個斷點處用中斷代碼代替原始指令。
當程序到達斷點時,Debug.exe 將所有斷點地址恢復為它們的原始指令并顯示所有寄存器的內容、所有標志的狀態以及最后執行指令的解碼形式。Debug.exe 此時顯示的信息與使用 r (register) 子命令并指定斷點地址時相同。
如果不在斷點處停止程序,Debug.exe 將不使用原始指令替換中斷代碼。
可以只在包含 8086 操作代碼(操作碼)的第一個字節的地址上設置斷點。如果設置了 10 個以上的斷點,Debug.exe 將顯示以下信息:
bp?error
使用用戶堆棧指針
用戶堆棧指針必須有效且必須有 6 個可用于 g 子命令的字節。g 子命令使用 iret 指令跳轉到需要測試的程序。Debug.exe 設置用戶堆棧指針并將用戶標志、代碼段寄存器和指令指針壓入用戶堆棧。(如果用戶堆棧無效或太小,操作系統可能會失敗。?Debug.exe 在指定的斷點地址處或指定的地址處放置中斷代碼 (0CCh)。
重新啟動程序
出現下述消息后,請不要重新啟動程序:
Program?terminated?normally
要正確地運行程序,必須通過使用 n (Name) 和 l (Load) 子命令重新加載該程序。
獲取使用 p 子命令來執行循環、重復的字符串指令、軟件中斷或子例程的信息,請參閱“相關主題”
獲取使用 t 子命令來執行一個指令的信息,請參閱“相關主題”
范例
要運行當前內存中的程序,并要執行到 CS 段中的斷點地址 7550 為止,請鍵入:
gcs:7550
Debug.exe 將顯示寄存器的內容和標志的狀態,然后終止 g 子命令。
要設置兩個斷點,請鍵入:
gcs:7550,?cs:8000
如果在 Debug.exe 遇到某個斷點之后再次鍵入 g 子命令,則將從該斷點之后的指令開始執行,而不是在開始地址處執行。