ollydbg原理分析 硬體斷點與int3

2021-06-27 20:03:31 字數 2025 閱讀 1517

今天繼續接著上次的分析,來繼續分析od原理,這次先分析od最基本的功能,斷點,單步和執行到指定位置。

類似的文章前輩們已經寫了很多了,這裡只是將前輩們的思路實踐了一下,順便加入一點自己的理解和認識!

一般載入od之後,往往大家會先下斷點,或者直接單步執行。

一般當我們著手分析乙個程式的時候總是會下乙個int 3斷點,其實這個就是f2的原理

隨便載入乙個程式,點一下f2,然後用ollydbg儲存的時候,發現提示說是檔案未被修改,其實這個也能理解,因為我們按下f2的時候,程式還沒被執行,所以dump下來吧,但是dump需要要求程式連同f2能夠斷下,所以改一下程式:

構建乙個這樣的死迴圈,這樣,程式在執行的時候會一直在013b2165前執行,而斷點在後,記憶體中斷點被記錄,所以dump下來就可以看到程式的變化

int 3粗線了,原理得證明(基址載入的時候肯定會變化)

f4原理:

改乙個這樣的程式

看一下除錯暫存器

f4後將f4位址放在了除錯暫存器裡,執行程式的時候就會中斷到那個地方

f8(步過)原理:

隨便寫乙個程式,然後修改一下彙編,使之構成乙個迴圈

在00f11de8處f2斷點

在函式的時候f8步過,發現函式停在00f11de8處,然後在除錯視窗右擊檢視除錯暫存器,發現

關於除錯暫存器,具體說明請看裝載的這篇文章,

有了對除錯暫存器大致的了解之後,貌似我們弄懂了一些在逆向時候的問題

比如為什麼硬體斷點只能有4個(只有4個除錯暫存器)

發現除錯暫存器根本沒有變化,其實這個很好理解,因為在沒有執行到函式之前的f8其實就是相當於f2功能

f7原理:步入

這個說法不一,查詢了前輩們的說法,認為是標誌暫存器t的原因:

當tf被設定位1時,cpu進入單步模式,所謂單步模式就是cpu在每執行一步指令後都產生乙個單步中斷。主要用於程式的除錯。8086/8088中沒有專門用來置位和清零tf的命令,需要用其他辦法。

自己想了乙個方法證明:

構造乙個這樣的迴圈:

在執行到call的時候,改變t的標誌位,然後直接讓程式執行,發現程式停在開始處,得證。

在這和之後,在貼一段前輩們的總結:

將tf置1:程式將斷在下一條原子操作處,並將tf位清零。原子操作是指不會被執行緒排程機制打斷的操作;這種操作一旦開始,就一直執行倒結束,中間不會有任何 context switch (切換到另乙個執行緒)。call指令是原子操作,它的作用是:將返回位址壓棧,並跳轉。所以,在呼叫call的時候,如果我們將tf置1,那麼程式將在call指令的功能完成以後(即將返回位址壓棧並跳轉)斷下來。而執行call內的語句則僅僅是call的邏輯功能(我們理解的功能),並非實際的功能(cpu理解的功能)。

以上差不多硬體斷點的一些原理都介紹了,驗證的方法其實就是怎麼去構造那段彙編**,其實這個也很好想啊,想驗證對函式的操作,步入或者步過,就要構造乙個call啊,想要了解執行到斷點處和游標處,就要想著讓他跳轉啊,所以有jmp,然後之所以都構成迴圈,是因為讓程式停在我們需要驗證的地方啊。

接下來會繼續分析,od的記憶體斷點的原理

未完待續,大牛勿噴!

硬體斷點原理

這些就是除錯暫存器組,dr0 dr7。dr0,dr1,dr2,dr3是用於設定硬體斷點的,由於只有4個硬體斷點暫存器,所以同時最多只能設定4個硬體斷點。產生的異常是status single step 單步異常 dr4,dr5是系統保留的。dr7是一些控制位,用於控制斷點的方式,dr6是用於顯示哪個...

硬體斷點和軟體斷點

硬體斷點和軟體斷點 在嵌入式開發 經常用到 jtag 器。jtag 器可以滿足嵌入式程式除錯的基本要求 斷點設定 單步除錯 記憶體編輯 變數 暫存器觀測等。而斷點設定是 jtag 器最基本的除錯功能。使用者需要系統在設定斷點處停下來後再進行除錯。斷點根據原理和用途不同又分為幾個不同的種類。斷點可分為...

記憶體斷點和硬體斷點

32位邏輯位址 16位段選擇器 偏移位址 16位段選擇器 13位全域性描述符表 區域性描述符表索引 1位gdt ldtflag 2位的訪問控制許可權 由16位得到段選擇器索引到全域性描述符表得到64位的段描述符,段描述符中包含了線性段基址 線性段基址 偏移位址 邏輯位址後半段 得到線性位址空間的乙個...