日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OD软件断点原理

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OD软件断点原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • int 3
    • OD
    • Hex_Editor
    • 補充

軟件斷點即 int 3----l調試器利用 EXCEPTION_BREAKPOINT異常實現斷點功能。

int 3

設置斷點命令對應的匯編指令為INT3,對應的機器指令的也就是0xCC。CPU運行代碼的過程中若遇到匯編指令INT3,則會觸發EXCEPTION_BREAKPOINT異常。在OllyDbg調試器某個地址設置斷點后,確定該地址處的指令是否真會變為INT3(0xCC)?

OD


接下來我們查看以下數據窗口,

查看到設置斷點的地方,該地址處的指令并未變成INT3(匯編指令),也并未"6A“變成”CC"(機器指令),為什么跟我們想的不一樣呢?

解釋
其實,這是Ollydbg耍的一個小花招,由于Ollydbg中按F2設置的斷點是用戶用來調試的臨時斷點(User Temporary Break Point),所以不需要在調試畫面中顯示。在代碼與內存中顯示出來的話,大大降低了代碼的可讀性,給代碼調試帶來不便。換言之,實際進程內存中0x1003E21的“6A”已經換成“CC”,但為了調試方便,所以呢,OD就沒有顯示出來。我們只需要把這個程序dump出來,然后放進Hex_Editor查看一下這個位置的數據即可。

偏移問題:
此程序的Imagebase為100000,所以VA1003E21對應的RVA 是3E21(RVA=VA-Imagebase)。由于dump程序是直接由這個程序進程內存轉儲而來的,所以RVA就是RAW(文件偏移量)

Hex_Editor



偏移為3E21處的“6A”已經換成“CC”

補充

問題一:,改成int 3,那不就破壞了原來的指令的完整性嗎?
后來,我又仔細想了想,改成int 3,那不就破壞了原來的指令的完整性嗎?而且不改回來,那后面指令解析那就全變了,指令對齊那些,直接影響一大片,也就是以后設置斷點還得找nop地方才能設置?可事實卻根本不是這樣。。

問了一下大佬,這個問題解釋是這樣的:它會先把下斷點的位置的前一句代碼改成int 3 然后 等到運行到這里時,再把它改回來

問題二:什么時機改回來?
然后我又想:啥時候改回來?而且改回來這個時機 既能 引發斷點異常,又能 不改變原來的指令解析?碰到int 3 ,引發異常了,說明把int 3執行完了,然后它有改回來?那它再改回來已經沒意義了吧????它已經執行完那個點了,然后再改回來那個地方的指令,確定沒影響????

這個問題解釋是這樣的:先,調試器把斷點處的第一個字節改成0XCC,當接收到繼續運行的消息時,調試器會先把這個int 3斷點修復成原來的字節,然后會執行eip-1這個操作,把int 3改掉的代碼繼續執行,好家伙,有eip-1的話,那么就很正常了

總結

以上是生活随笔為你收集整理的OD软件断点原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。