日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

OD粗跟蹤和Run跟蹤 (OD譯文)

 herowuking 2015-08-06

本帖主要看 RUN跟蹤-有空可以再看看OD官方的英文文檔,這樣更好,以下為譯文。
OD之父的設(shè)計思路其實也是 RUN跟蹤,(在單步走的時候條件成立之時就會記錄一行可疑的代碼)
快捷鍵如下:
Ctrl+T
- 打開 暫停 Run跟蹤 對話框

Ctrl+F11
-Run跟蹤步入,一條一條執(zhí)行命令,進入每個子函數(shù)調(diào)用,并把寄存器的信息加入到Run跟蹤的存儲數(shù)據(jù)中。Run跟蹤不會同步更新CPU窗口。

Ctrl+F12 - Run跟蹤
-Run跟蹤步過,一條一條執(zhí)行命令,但是不進入子函數(shù)調(diào)用,,并把寄存器的信息加入到Run跟蹤的存儲數(shù)據(jù)中。Run跟蹤不會同步更新CPU窗口。



一、單步進入(F7)遇見CALL就進!進入該子程!行話:"跟進去"

      單步跳過(F8)遇見CALL不進去!不去管子程的內(nèi)部!第一次粗跟的時候常用!

      執(zhí)行到返回(ALT+F9)就是執(zhí)行到該子程的返回語句!



      您可以通過按 F7(單步步入)或 F8(單步步過),對程序進行單步調(diào)試。這兩個單步執(zhí)行操作的主要區(qū)別在于:如果當(dāng)前的命令是一個子函數(shù),按F7,將會進入子函數(shù),并停在子函數(shù)的第一條命令上;而按 F8,將會一次運行完這個子函數(shù)。如果您單步步過的子函數(shù)中含有斷點或其他調(diào)試事件,執(zhí)行將會被暫停,但 OllyDbg 會在子函數(shù)的后一條命令上,自動下一個斷點,而這個斷點您遲早會碰到。


      如果被調(diào)試程序停在異常上,您可以跳過它,并轉(zhuǎn)到被調(diào)試程序建立的句柄處。只需簡單的 Shift 鍵和任何一個單步命令。


       如果需要連續(xù)按F7、F8鍵上百次,您可以使用自動執(zhí)行(Ctrl+F7或者Ctrl+F8)功能。在這種情況下,OllyDbg 將自動重復(fù)F7或者F8操作,并且實時更新所有的窗口。這個過程會在下面情況停止:

       - 按 Esc 鍵或發(fā)出任何單步命令


       - OllyDbg 遇到斷點


       - 被調(diào)試程序發(fā)生異常

       另外 使用“+”和“-”按鍵,可以回朔以前的執(zhí)行歷史  (這個也夠?qū)嵱玫?,?jīng)常用)

       注意:當(dāng)執(zhí)行停止時 OllyDbg 將會刷新大部分窗口。如果動態(tài)執(zhí)行過程非常慢,可以嘗試關(guān)掉或最小化沒有用的窗口。


       另外,更快捷的找到以前執(zhí)行指令的辦法是Run跟蹤[run trace]。它將創(chuàng)建一個執(zhí)行協(xié)議并告知您指定指令的執(zhí)行時間和次數(shù)

二、Run 跟蹤[Run trace]

Run 跟蹤是一種反方向跟蹤程序執(zhí)行的方式,可以了解以前發(fā)生的事件。您還可以使用Run跟蹤來了解運行的簡單統(tǒng)計。基本上,OllyDbg 是一步一步地執(zhí)行被調(diào)試程序的,就像動畫演示一樣,但不會實時刷新窗口,最重要的是它能將地址、寄存器的內(nèi)容、消息以及已知的操作數(shù)記錄到Run跟蹤緩沖區(qū)中。如果被調(diào)試的代碼是自修改的,您就能夠保存原始的命令??梢酝ㄟ^按Ctrl+F11(Run跟蹤步入,進入子函數(shù))或者 Ctrl+F12(Run跟蹤步過,一次執(zhí)行完子函數(shù))開始Run跟蹤,并用F12或者Esc鍵停止跟蹤。

您可以指定在Run跟蹤時執(zhí)行每一步的條件集(快捷鍵:Ctrl+T)。如果條件符合,Run跟蹤將暫停。條件包括:

當(dāng)EIP在某個地址范圍內(nèi)時暫停[Pause when EIP is in the address range];

當(dāng)EIP在某個地址范圍之外時暫停[Pause when EIP is outside the address range];

當(dāng)某個條件為真時暫停[Pause when some condition is true];

當(dāng)下一條指令可疑時暫停[Pause when next command is suspicious],比如:可能為非法指令(根據(jù)在分析3[Analysis 3]中設(shè)定的規(guī)則而定),訪問不存在的內(nèi)存,設(shè)置了單步陷阱標(biāo)志[single-step trap flag]或者越ESP界訪問棧。注意這個選項會明顯地(大約20%)減慢Run跟蹤的速度;


當(dāng)命令執(zhí)行達(dá)到指定的次數(shù)(更確切的說,是添加到Run跟蹤的緩沖區(qū)里面的命令數(shù)量)時暫停[Pause after specified number of commands is traced]。注意計數(shù)器不能自動歸零。也就是說,如果您設(shè)置指令次數(shù)為10,則在第10次執(zhí)行到該命令時暫停,并不是該命令每執(zhí)行10次就暫停一次。


當(dāng)下一條命令符合指定的樣式之一時暫停[Pause when next command matches one of the specified patterns]。您可以使用模糊命令和操作數(shù)[imprecise commands and operands]及匹配32位寄存器RA和RB,像R32一樣,這兩個寄存器可以替代任何通用32位寄存器,但是在同一條命令中其值是不能變的。而 RA 和 RB

在同一條命令中,則一定是不同的。例如,在程序中含有 XOR EAX,EAX; XOR ESI,EDX 兩條命令,兩條命令均符合樣式 XOR R32,R32;第一條命令符合樣式XOR RA,RA

;而等二條命令 XOR ESI,EDX 符合樣式XOR RA,RB。


毫無疑問,Run跟蹤需要足夠的內(nèi)存,每條命令平均需要占用16到35字節(jié),同時速度也非常慢。在500-MHZ處理器、Windows NT環(huán)境下,它每秒能跟蹤5000條指令。

Windows95 更慢:每秒鐘僅2200條指令。但是在許多情況下,例如當(dāng)一個程序跳轉(zhuǎn)到不存在的地址的時候,這是找到原因的唯一方法。您可以在Run跟蹤時將準(zhǔn)線性命令序列(即序列尾部只有唯一出口)跳過。當(dāng)OllyDbg遇到這些需跳過的命令序列時,會設(shè)置一個臨時斷點,然后跟進到序列中,并一次運行完。當(dāng)然了,如果排除命令中返回或跳轉(zhuǎn)的地址在跟蹤范圍之外,將可能導(dǎo)致跟蹤發(fā)生錯誤;因此OllyDbg會檢查您想跳過的代碼塊,如果存在上述情況,會向您詢問。


在大多數(shù)情況下,您對跟蹤系統(tǒng)API代碼不感興趣。跟蹤選項總是跟過系統(tǒng)DLL[Always trace over system DLLs]允許您在跟蹤/自動模式下跟過API函數(shù)。如果模塊在系統(tǒng)目錄下,OllyDbg就假設(shè)該模塊是系統(tǒng)的。您可以在模塊[Modules]窗口中標(biāo)記任意DLL是系統(tǒng)的或者非系統(tǒng)的。


為了使執(zhí)行速度更快,您可以通過設(shè)置Run跟蹤斷點,先將Run跟蹤限制在選定的命令或代碼塊上,然后再運行程序。我把這種做法稱作“強迫Run跟蹤”。一般來說,刪除Run跟蹤斷點不會移除Hit跟蹤斷點。但如果您刪除了hit跟蹤斷點,同時您也移除了Run跟蹤斷點。


跟蹤命令會保存到跟蹤緩沖區(qū)中,這個緩沖區(qū)在跟蹤開始時自動創(chuàng)建。您可以在選項中指定它的大小(最高64MB)。這個緩沖區(qū)是循環(huán)隊列,當(dāng)滿了的時候,會丟棄老的記錄。


您可以通過從OllyDbg主菜單中選擇“調(diào)試[Debug]|打開或者清除Run跟蹤[Open or clear run trace]”,來打開或者清除Run跟蹤緩沖區(qū)。在Run跟蹤緩沖區(qū)打開后,

OllyDbg 會記錄在執(zhí)行過程中的所有暫停,甚至那些不是由Run跟蹤引起的暫停。例如,您可以通過按 F7 或者 F8 單步執(zhí)行程序,然后通過使用+鍵和-鍵來反方向跟蹤程序的執(zhí)行。注意:如果Run跟蹤緩沖區(qū)已經(jīng)關(guān)閉,則用這些鍵瀏覽的是歷史[history]記錄。在您查看Run跟蹤記錄時,寄存器和信息面板會變灰,來強調(diào)它們所顯示的寄存器并不是實際的寄存器。跟蹤緩沖區(qū)并不保存棧頂或由寄存器所指向的內(nèi)容。寄存器、信息和棧在Run跟蹤的時候使用實際的內(nèi)存狀態(tài)來解釋寄存器的變化。


OllyDbg能夠記下每個指令在Run跟蹤緩沖區(qū)里面出現(xiàn)的次數(shù)。在反匯編窗口快捷菜單中,選擇是“查看[View]|統(tǒng)計作為注釋[Profile as comments]”。這個命令使用統(tǒng)計取代了注釋欄?;蛘?,如果列標(biāo)題欄可見,則可以單擊它幾次直到它顯示統(tǒng)計信息。注意顯示出來的數(shù)字是動態(tài)的,而且不計算已經(jīng)從跟蹤緩沖區(qū)中丟棄的指令。您還可以在單獨的統(tǒng)計窗口[Profile window]中,按觸發(fā)次數(shù)排序,來查看整個模塊的統(tǒng)計數(shù)據(jù)。


在反匯編窗口的快捷菜單中選擇“Run跟蹤[Run trace]|添加到所有函數(shù)入口處[Add entries of all procedures]”,這樣能夠檢查每個可識別的函數(shù)被調(diào)用的次數(shù)。另一個命令“Run跟蹤[Run trace]|添加到函數(shù)中所有的分支[Add branches in procedure]”會強行跟蹤此函數(shù)中所有識別的跳轉(zhuǎn)目的地址的內(nèi)容。在這種情況下,統(tǒng)計功能能夠找到最頻繁執(zhí)行的分支,您可以優(yōu)化這部分的代碼,以提高速度。


在反匯編窗口中的某條命令上使用快捷菜單中選擇“搜索[Search for]|Run跟蹤的最新記錄[Last record in run trace]”用于查找該命令是否被執(zhí)行過,如果執(zhí)行過,最后一次執(zhí)行在哪里。



Run 跟蹤窗口顯示跟蹤緩沖區(qū)的內(nèi)容。對每個指令來說包括被指令改變的整數(shù)寄存器的內(nèi)容(更準(zhǔn)確的說是給定的記錄變成下一條記錄的變化)。如果您雙擊某條指令,窗口會選擇在跟蹤緩沖區(qū)里全部含有該命令的記錄,而且您可以通過按+和-鍵來快速的瀏覽;如果您在調(diào)試選項[Debugging options]中設(shè)置了 “跟蹤[Trace]|同步CPU和

Run跟蹤[Synchronize CPU and Run trace]”,雙擊記錄則會跟進到對應(yīng)的反匯編窗口中位置。


注意:當(dāng)您退出Hit跟蹤時,您同時也強行退出了Run跟蹤。


以下是Run 跟蹤實例:

  Run trace可以把被調(diào)試程序執(zhí)行過的指令保存下來,了解以前發(fā)生的事件,它能把地址、寄存器的內(nèi)容、消息等記錄到Run trace緩沖區(qū)中,在運行Run trace前,要把緩沖區(qū)設(shè)置大些,否則執(zhí)行的指令太多造成緩沖區(qū)溢出:

如果要把Run trace的數(shù)據(jù)保存到文件,在跟蹤之前,打開Run trace窗口,鼠標(biāo)右擊執(zhí)行Log to file即會彈出個文件保存框
需要運行Run trace,單擊菜單Debug/Open or clear run trace,在打開Run trace緩沖區(qū)后,OD會記錄
在反匯編窗口顯示的是被調(diào)試程序領(lǐng)空,在反匯編窗口的快捷菜單中選擇Run trace/Add entries of all procedures(Run trace/添加所有函數(shù)過程的入口),這樣能夠檢查每個可識別的函數(shù)被調(diào)用的次數(shù),之后,可以在Run trace窗口鼠標(biāo)右擊執(zhí)行profile module(統(tǒng)計模塊)查看統(tǒng)計次數(shù)


Hit trace能夠讓調(diào)試者辯別哪一部分代碼執(zhí)行了,哪一部分沒有,OD的實現(xiàn)方法相當(dāng)簡單,它將選中區(qū)域的每一條命令處均設(shè)置一個INT3斷點,當(dāng)中斷發(fā)生的時候,OD就把它去掉,在使用Hit trace的時候,不能在數(shù)據(jù)中設(shè)置斷點,否則程序可能會崩潰
當(dāng)遇到一段跳轉(zhuǎn)分支較多的代碼時,需要了解程序執(zhí)行線程,可以用Hit trace,方法是選中這段代碼,單擊右鍵執(zhí)行Hit trace/Add selection,OD會在已被執(zhí)行過的指令前用另一種顏色標(biāo)記出來

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多