iOS逆向學習筆記 - 彙編(四) - 迴圈&選擇[cmp 比較指令]

weixin_33912445發表於2018-05-16

004 迴圈&選擇

cmp(Compare)比較指令

   CMP 把一個暫存器的內容和另一個暫存器的內容或立即數進行比較。但不儲存結果,只是正確的更改標誌。
   一般CMP做完判斷後會進行跳轉,後面通常會跟上B指令!

  • BL 標號:跳轉到標號處執行
  • B.GT 標號:比較結果是大於(greater than),執行標號,否則不跳轉
  • B.GE 標號:比較結果是大於等於(greater than or equal to),執行標號,否則不跳轉
  • B.EQ 標號:比較結果是等於,執行標號,否則不跳轉
  • B.HI 標號:比較結果是無符號大於,執行標號,否則不跳轉

Switch

1、假設switch語句的分支比較少的時候(例如3,少於4的時候沒有意義)沒有必要使用此結構,相當於if。
2、各個分支常量的差值較大的時候,編譯器會在效率還是記憶體進行取捨,這個時候編譯器還是會編譯成類似於if,else的結構。
3、在分支比較多的時候:在編譯的時候會生成一個表(跳轉表每個地址四個位元組)。

相關文章