首頁  >  文章  >  運維  >  debug g指令怎麼用?

debug g指令怎麼用?

藏色散人
藏色散人原創
2019-04-29 11:13:5810485瀏覽

DEBUG中G指令是用來執行程式碼的,其語法是“g [=address] [breakpoints]”,該指令後面可以跟位址和斷點,運行到記憶體指定位置的程式碼後暫停,如果不加參數預設是從目前IP運行到程式結束。

debug g指令怎麼用?

DEBUG 中G指令是用來執行程式碼的。此指令後面可以跟位址和斷點,即格式為 g [=address] [breakpoints],運行到記憶體指定位置的程式碼後暫停,如果不加參數預設是從目前IP運行到程式結束。

debug g指令怎麼用?

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 子命令,則將從該斷點之後的指令開始執行,而不是在開始位址處執行。

以上是debug g指令怎麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn