OllyDbg完全教程 斷點[Breakpoints]

來源:互聯網
上載者:User
九,斷點[Breakpoints]

OllyDbg支援數種不同類型的斷點:

- 一般斷點[Ordinary breakpoint], 將您想中斷的命令的第一個位元組,用一個特殊命令INT3(調試器陷阱)來替代。您可以在反組譯碼視窗中選中要設斷點的指令行並按下 F2 鍵就可以設定一個此類型的斷點。也可以在捷徑功能表中設定。再次按下 F2 鍵時,斷點將被刪除。注意,程式將在設斷指令被執行之前中斷下來。

INT3斷點的設定數量是沒有限制的。當您關閉被偵錯工具或者調試器的時候,OllyDbg將自動把這些斷點儲存到硬碟中,永遠不要試圖在資料區段或者指令的中間設定這種斷點,如果您試圖在程式碼片段以外設定斷點,OllyDbg將會警告。您可以在安全選項[Security options]中永遠關閉這個提示,在某些情況下調試器會插入內建的臨時INT3
斷點。

- 條件斷點[Conditional breakpoint] (快速鍵 Shift+F2) 是一個帶有條件運算式的普通INT3斷點。當調試器遇到這類斷點時,它將計算運算式的值,如果結果非零或者運算式無效,將暫停被偵錯工具,當然,由條件為假的斷點引起的開銷是非常高的(主要歸因於作業系統的反應時間)。在Windows NT、奔騰Ⅱ/450處理器環境下
OllyDbg每秒最多處理2500個條件為假的斷點。條件斷點的一個典型使用方式就是在Windows訊息上設定斷點(比如 WM_PAINT)。為此,您可以將偽變數 MSG 同適當的參數說明聯合使用。如果視窗被啟用,參考一下後面的訊息斷點描述。

- 條件記錄斷點 [Conditional logging breakpoint] (Shift+F4)是一種條件斷點,每當遇到此類斷點或者滿足條件時,它將記錄已知函數運算式或參數的值。例如,您可以在一些視窗過程函數上設定記錄斷點並列出對該函數的所有調用。或者只對接收到的WM_COMMAND訊息標識符設斷,或者對建立檔案的函數(CreateFile)設斷,並且記錄以唯讀方式開啟的檔案名稱等,記錄斷點和條件斷點速度相當,並且從屬記錄視窗中瀏覽上百條訊息要比按上百次F9輕鬆的多,您可以為運算式選擇一個預先定義好的解釋說明。

您可以設定通過的次數 - 每次符合暫停條件時,計數器就會減一。如果通過計數在減一前,不等於零,OllyDbg就會繼續執行。如果一個迴圈執行100次(十進位),在迴圈體內設定一個斷點,並設定通過次數為99(十進位)。OllyDbg將會在最後一次執行迴圈體時暫停。

另外,條件記錄斷點允許您傳遞一個或多個命令給外掛程式[plugins]。例如,您需要使用命令列外掛程式改變一個寄存器的內容,然後繼續執行程式。

- 訊息斷點[Message breakpoint]和條件記錄斷點基本相同,除了OllyDbg會自動產生一個條件,這個條件允許在視窗過程的入口處設定某些訊息(比如WM_PSINT)斷點,您可以在視窗[Windows]中設定它。

- 跟蹤斷點[Trace breakpoint] 是在每個選中命令上設定的一種特殊的INT3斷點。如果您設定了Hit跟蹤[hit trace] ,斷點會在命令執行後移除,並在該地址處做一個標記。如果您使用的是Run跟蹤[run trace] ,OllyDbg會添加跟蹤資料記錄並且斷點仍然是保持啟用狀態。

- 記憶體斷點[Memory breakpoint] OllyDbg每一時刻只允許有一個記憶體斷點。您可以在反組譯碼視窗、CPU視窗、資料視窗中選擇一部分記憶體,然後使用捷徑功能表設定記憶體斷點。如果有以前的記憶體斷點,將被自動刪除。您有兩個選擇:在記憶體訪問(讀,寫,執行)時中斷,或記憶體寫入時中斷。設定此類斷點時,OllyDbg將會改變所選部分的記憶體塊的屬性。在與80x86相容的處理器上將會有4096位元組的記憶體被分配並保護起來。即使您僅僅選擇了一個位元組,OllyDbg 也會將整個記憶體塊都保護起來。這將會引起大量的錯誤警告,請小心使用此類斷點。某些系統函數(特別是在Windows95/98下)在訪問受保護的記憶體時不但不會產生調試事件反而會造成被偵錯工具的崩潰。

- 硬斷點[Hardware breakpoint](僅在Windows ME,NT或2000下可用)在80x86相容的處理器上,允許您設定4個硬體斷點。和記憶體斷點不同,硬體斷點並不會降低執行速度,但是最多隻能覆蓋四個位元組。在逐步執行或者跟蹤代碼時,OllyDbg能夠使用硬斷點代替INT3斷點。

- 記憶體訪問一次性斷點[Single-shot break on memory access] (僅在Windows NT或2000下可用)。您可以通過記憶體視窗的捷徑功能表(或按F2),對整個記憶體塊設定該類斷點。當您想捕捉調用或返回到某個模組時,該類斷點就顯得特別有用。中斷髮生以後,斷點將被刪除。

- 暫停Run跟蹤[Run trace pause] (快速鍵:Ctrl+T)是在每一步Run跟蹤[run trace] 時都要檢查的一個條件集.您可以在EIP進入某個範圍或超出某個範圍時暫停,某個條件為真時暫停,或者命令與指定的模式比對時暫停,或者當命令可疑的時候暫停。注意,這一選擇會極大的(高達20%)降低Run跟蹤的速度。

OllyDbg也可以在一些調試事件[debugging events]上暫停程式執行。比如載入或卸載DLL,啟動或終止線程,或者程式發出調試字串的時候。

10,資料視窗[Dump]
資料視窗用於顯示記憶體或檔案的內容。您可以從以下預先處理格式[predefined formats]中選擇一種顯示方式:位元組[byte]、文本[text]、整數[integer]、浮點數[float
]、地址[address],反組譯碼[disassembly]、 PE頭[PE Header]。

所有的dump視窗支援備份[backup]、搜尋和編輯操作。CPU 視窗[CPU window]的Dump面板允許您對可執行代碼的資料和可執行檔(.exe,或.dll)的記憶體映射做如下操作:定義標籤[labels]、設定 記憶體斷點[memory breakpoints], 尋找參考[references]。資料菜單[Dump menu]只顯示與選中部分相關的命令。

如果 備份[backup]可用,則單擊第一個欄位標題欄,會在地址[Address]/備份[Backup] 兩種顯示模式之間切換。點擊其他欄位標題欄,會改變Dump模式。

像反組譯碼視窗一樣,資料視窗也儲存了大量查看記憶體位址的記錄。您可以通過“+”和“-”鍵來訪問您過去查看過的資料地址空間。

要翻動一位元組的資料,可以按住Ctrl l鍵並按上/下方向鍵。

可執行模組視窗[Executable modules window]
可執行模組視窗(快速鍵:Alt+E)列出了當前被調試進程載入的所有可執行模組。它也顯示了很多有用的資訊,比如模組大小、入口地址、模組版本、以及可執行檔路徑等。一些資訊,如以十進位顯示的模組大小、入口地址的符號名、是否為系統模組等,通常是被隱藏的。如果想看,可以增加相應欄的寬度。捷徑功能表支援以下操作:

重新整理[Actualize] - 重新掃描模組並去除對新載入模組的高亮顯示。在大多數情況下,OllyDbg會自動完成該操作。

查看記憶體[View memory] - 開啟記憶體視窗,並定位到屬於該模組鏡像的第一個記憶體塊處。

在CPU視窗中查看代碼[View code in CPU] (快速鍵:斷行符號鍵) - 在反組譯碼視窗中顯示模組的可執行代碼。

跟進到入口[Follow entry] - 在反組譯碼視窗中跟進到模組的入口處。

在CPU視窗中查看資料[Dump data in CPU] -在CPU視窗的資料面板中顯示模組的資料區段。塊程式碼片段。

顯示名稱[View names] (快速鍵:Ctrl+N) -顯示當前模組定義或使用的全部名稱[names](包括輸出表、引入表、連結庫、使用者自訂)。

標記為系統DLL[Mark as system DLL],
標記為非系統DLL[Mark as non-system DLL] - 將選中模組標記為系統或非系統屬性。如果設定為系統屬性,則在Run跟蹤[Run trace] 時會直接執行(不進行跟蹤)這個模組,從而大大加快跟蹤速度。預設情況下,所有駐留在系統目錄(通常在Windows 95/98下為c:/windows/system ,在WinNT/2000/XP下為c:/winnt/system32)的模組都認為是系統模組。

立即更新.udd檔案[Update .udd file now] -向檔案“<模組名>.udd”寫入模組相關的全部資料,udd檔案儲存了在調試期間設定的斷點、標籤、注釋、監視、分析等資訊。當模組卸載時OllyDbg會自動建立.udd檔案。

查看可執行檔[View executable file] - 顯示可執行檔的全部內容。

查看全部資源[View all resources] - 以列表形式顯示模組定義的全部資源,並帶有一個簡簡訊息。OllyDbg並不把資源當作單獨實體來支援。您可以提取[Dump]並以二進位的形式進行編輯。

查看資源字串[View resource strings] -以列表形式顯示資源字串及其標識符。

查看Run跟蹤的統計[View run trace profile] - 在此模組中計算統計[profile] 。相關資訊:Run跟蹤[Run trace].

分析全部模組[Analyze all modules] -允許同時分析全部模組。分析將從代碼中提取大量的有用資訊;代碼經過分析後再進行調試,通常會非常快並且可靠。

滑鼠雙擊某一行,將會在反組譯碼視窗中顯示模組的執行代碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.