ARM彙編指令集與機器碼

0x00 本文目標

  • 本文內容從《ARM Architecture Reference Manual》中截取翻譯,可以看作是一個重點筆記集。僅記錄博主認爲有意思的部分,並加入一些個人理解。如果發現有不對的地方歡迎留言指正。
  • 現代的智能手機是能進行ARM彙編級別交互的最便捷的設備,因此實例分析的內容基於博主的小米Note+IDA,和某個正在被調試的安卓程序。該程序加載的SO文件使用armeabi架構。

0x01 ARM模型與概念

ARM支持三種數據類型的讀寫:Byte(8 bits),Halfword(16 bits),Word(32 bits)。所有內存指令相關的讀寫操作都會基於這三種數據類型。

ARM使用小端存儲,這意味着例如指令E5 9F 00 90在內存中會反序存儲爲:

0x00a0 90 00 9F E5

在讀取指令後,會被還原爲正序E59F0090。

ARM一共支持7種處理器模式,程序在編譯後所運行的絕大部分時間片中,例如執行了一段MD5加密函數,都處於usr模式。

寄存器示例圖,某個程序正在處於調試暫停中。

ARM處理器一共有37個之多的寄存器。在所有的ARM狀態模式中,有15個可見寄存器(R0~R14),和1~2個狀態寄存器隨時可編程交互。其餘沒有提到的寄存器,用於處理異常、中斷等核心指令,外部不可見也不能自主控制讀寫。

R0~R7作爲不保留寄存器,可以自由編程指定其含義。例如R0~R3最常用於參數傳遞,返回值等保存。

R8~R14是保留寄存器,有自己的特殊含義,在寄存器實例圖中可以看到多半保存和地址相關的值,又或者指向了SP地址或LR地址。

通常R13就是SP(Stack Pointer)寄存器,該值指向當前彙編代碼段可以使用的棧起始地址。R14作爲LR(Link Register)寄存器,保存當前彙編代碼段執行完畢後,需要回溯到的彙編代碼地址。PC程序計數器是一個特殊的寄存器,指向當前正在執行的代碼地址。

PSR標誌寄存器,也就是寄存器實例圖右邊的對usr用戶模式有意義的NZCVQFTMODE標誌位,對程序的分支結構執行,運算的結果產生影響。

N(Negative)標誌位當運算結果爲負數時值爲1。Z(Zero)標誌位當運算結果爲0時值爲1。C標誌位有多個用途,其中當執行CMP等比較指令時,用1和0分別代表真假。

0x01 彙編指令與機器碼

ARM標準模式下的指令集的機器碼編碼位結構一共有32位,由幾個通用部分組成:條件碼,識別碼,操作標識碼,操作數(立即數、地址數等,編碼內容看指令的具體含義)。

其中識別碼[27:25]的值用於區分指令類別,下圖實例拆解一條指令:

在對應的位表示中識別碼[27:25]的值是010,對應指令集編碼結構圖可以定位到這是一條Load/store immediate offset(立即讀取存儲偏移量)指令。在對其他的位進行翻譯後可以得到原始彙編指令:ldr r0, [pc, #0x90]。

常用的指令集類別有:讀取存儲指令,流程控制指令,運算指令。

存儲指令可以將寄存器的值保存到內存地址中,讀取指令將內存地址保存到內存中。常見於STR和LDR。例如下圖0x1234地址指令分別將R1和R0的值保存到棧中,隨後又從程序地址中使用LDR指令再次賦值R0,R1寄存器。在彙編級別的底層內存結構讀寫時還有一個內存對齊問題,如果內存不對齊將會出現性能低下、程序崩潰、操作結果不可預料等後果。所以讀寫的目標地址永遠保持4的倍數是最佳,如果需要對已經生成的彙編指令去修改,那麼也需要保持這一原則。

此外,LDR指令讀取固化程序數據時還存在一個絕對偏移問題,在內存對齊的情況下,實際的偏移地址爲(立即操作數+8)。下圖‭B380A1B4‬地址的機器碼爲E59F51D4,拆分機器碼編碼後可以得到彙編指令LDR R5, [PC, #0x1D4],當前PC值爲0xB380A1B4,+0x1D4=0xB380A388,再加上絕對偏移地址量8即0xB380A390地址值,與IDA反彙編的語句值一致。(這裏有個疑點不知是隻有博主手機這樣還是所有的ARM設備都存在這一規則。)

機器碼[31:28]控制條件語句,例如常用的BNE不相等跳轉的機器碼[31:28]=0001。

數據處理指令及其機器編碼格式。《ARM Architecture Reference Manual》往後的內容都相似,對每個bit位的含義進行了詳細說明,博主就不機械複製粘貼了。如果你想要繼續學習命令列表,如MOV, ADD等可以繼續閱讀手冊,傳送門地址:https://download.csdn.net/download/dxcyber409/11250918

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章