IDA Pro 權威指南學習筆記(十三) - 基本代碼轉換


IDA提供的代碼轉換包括:

1.將數據轉換為代碼

2.將代碼轉換為數據

3.指定一個指令序列為函數

4.更改現有函數的起始或結束地址

5.更改指令操作數的顯示格式

代碼顯示選項

通過 Options -> General 命令打開“IDA Options”對話框,並選擇“Disassembly”選項卡

右上角的 Display disassembly line parts(顯示反匯編行部分)區域提供的選項,可以對反匯編行進行自定義

IDA 反匯編文本視圖會默認選擇行前綴、注釋和可重復注釋

Line prefixes 為行前綴,行前綴是每個反匯編行的 section:address 部分

如果不選這個選項,每個反匯編行將不會顯示行前綴(圖形視圖的默認設置)

Stack Pointer 為棧指針

選擇該選項,IDA 將會顯示棧指針在每個函數執行過程中的相對變化

這有助於識別調用約定方面的差異(例如,IDA 可能不知道某個特殊的函數使用的是 stdcall 調用約定),或者確定對棧指針的不尋常操縱

Comments 為注釋,Repeatable comments 為可重復注釋

取消任何一個選項,IDA 將不會顯示相應類型的注釋

Auto comments 為自動注釋

IDA 可能會為某些指令類型自動添加注釋,這種注釋可以作為一種提醒,以幫助用戶了解特殊指令的行為

IDA 不會為 x86 mov 等簡單的指令添加注釋

用戶注釋優先於自動注釋

Bad instructions <BAD> marks 為無效指令 <BAD> 標記

IDA 可以標記出處理器認為合法,但一些匯編器可能無法識別的指令,如未記入文檔的 CPU 指令(而非非法指令)

IDA 會將這種指令作為一個數據字節序列進行反匯編,並將未記入文檔的指令顯示為一段以 <BAD> 開頭的注釋,目的是生成大多數匯編程序都可以處理的反匯編代碼

Numbers of opcode bytes 為操作碼字節數

指定 IDA 應為每個指令顯示的機器語言字節的數量,選擇性地查看與匯編語言指令混雜在一起的機器語言字節

不管指令多長,IDA 都會在反匯編代碼清單中為指定的字節數預留顯示空間,而將反匯編代碼行的剩余部分移向右邊,從而為指定的操作碼字節數提供空間

+ 號表示:根據當前設置,該位置的指令過長,因而無法完整顯示

格式化指令操作數

右擊反匯編窗口中的任何常量

菜單提供的選項可將常量 41h 重新格式化成十進制、八進制或二進制值

常量 41h 屬於 ASCII 可打印常量,菜單中還提供了一個選項,可將該常量格式化成一個字符常量,快捷鍵為 R

常量可能是使用了 #define 語句(或其等效語句)的結果,也可能屬於一組枚舉常量

如果編譯器已經完成對源代碼的編譯,它就不再可能確定源代碼使用的是符號常量、文字常量還是數字常量

可以通過常量值的上下文菜單中的 Use standard symbolic constant(使用標准符號常量)選項來訪問這些常量

快捷鍵為 M

這是所有 IDA 認為與 0AH 相等的常量

根據我們嘗試格式化的常量值進行過濾后,這個對話框中的常量從IDA的內部常量列表導入

標准常量列表可用於確定某個特殊的常量是否與一個已知的名稱有關,使我們免於在 API 文檔中搜索潛在的匹配項

數據與代碼互相轉換

數據字節可能被錯誤地歸類為代碼字節,並被反匯編成指令

代碼字節可能被錯誤地歸類為數據字節,並被格式化成數據值

對反匯編代碼重新格式化之前,首先必須刪除其當前的格式(代碼或數據)

右擊想要取消定義的項目,選擇 Undefine,即可取消函數、代碼或數據的定義,快捷鍵為 U

可以使用 Edit -> Undefine

取消某個項目的定義后,其基礎字節將作為原始字節值重新格式化

在執行取消定義操作之前,使用“單擊並拖動”操作選擇一個地址范圍,可以取消大范圍內的定義

取消這個函數的定義將得到下面這些未分類的字節

要反匯編一組未定義的字節,右擊其中的第一個字節,在菜單中選擇 Code,快捷鍵為 C,也可以使用 Edit -> Code

可以使用 Edit -> Data 將代碼轉換為數據,快捷鍵為 D


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM