《逆向工程權威指南》 第2章2 3節MIPS

2021-09-23 16:10:56 字數 901 閱讀 1984

2.3 mips

在mips指令裡,暫存器有兩種命名方式。一種是以數字命名($0~$31),另一種則是以偽名稱(pseudoname)命名($v0~va0,依此類推)。在gcc編譯器生成的彙編指令中,暫存器都採用數字方式命名。

指令清單2.4 optimizing gcc 4.4.5(彙編輸出)

j       $31

li $2,123 # 0x7b

然而ida則會顯示暫存器的偽名稱。

指令清單2.5 optimizing gcc 4.4.5(ida)

jr      $ra

li $v0, 0x7b

根據偽名稱和暫存器數字編號的關係可知,儲存函式返回值的暫存器都是$2(即$v0)。此處li指令是英文片語「load immediate(載入立即數)」的縮寫。

其中,j和jr指令都屬於跳轉指令,它們把執行流遞交給呼叫者函式,跳轉到$31即$ra暫存器中的位址。這個暫存器相當於的arm平台的lr暫存器。

此外,為什麼賦值指令li和轉移指令j/jr的位置反過來了?這屬於risc精簡指令集的特性之一——分支**移)指令延遲槽 (branch delay slot)的現象。簡單地說,不管分支**移)發生與否,位於分支指令後面的一條指令(在延時槽裡的指令),總是被先於分支指令提交。這是risc精簡指令集的一種特例,我們不必在此處深究。總之,轉移指令後面的這條賦值指令實際上是在轉移指令之前執行的。

mips指令集與暫存器名稱

習慣上,mips領域中的暫存器名稱和指令名稱都使用小寫字母書寫。但是為了在排版風格上與其他指令集架構的程式保持一致,本書採用大寫字母進行排版。

[1] calling convention,又稱為函式的呼叫協定、呼叫規範。

《逆向工程權威指南》 第2章2 1節x86

第2章 最簡函式 逆向工程權威指南 返回預定常量的函式,已經算得上是最簡單的函式了。本章圍繞下列函式進行演示 指令清單2.1 c c int f 2.1 x86 在開啟優化功能之後,gcc編譯器產生的彙編指令,如下所示。指令清單2.2 optimizing gcc msvc 彙編輸出 f mov e...

重溫《js權威指南》 第2 3章

第二章 語法結構 2.1 js區分大小寫,html不區分大小寫 2.5 注意分號,如果沒有分號,直譯器會試 析js,並在不能解析的地方加分號 第三章 值和變數 js資料型別分兩類 原始型別 數字,字串,布林值 和物件型別。兩個特殊的原始值 undefined,null 3.1 數字 js不區分整型和...

《設計團隊協作權威指南》 第2章2 4節總結

2.4 總結 心態是乙個人面對事物時出現的知覺 態度和決定。知覺 對事物的第一反應。態度 對第一反應所持的立場。決定 基於這種立場所採取的行動。決定不一定要通過行為來表現。人們可以影響和改變心態,可以依據實際情況,調整自己的應對方式。我關於心態的看法是來自於卡蘿爾 德威克的研究成果,她定義了兩種心態...