IOS反彙編工具Hopper分析Crash Log

在Mac OS下分析Crash Log有不少種方法,這裏不是要說明如何分析的Crash Log, 主要是展現下Hopper的使用。 強大的IDA你們可能已經知道,但它的Mac OS版本又讓人回到了DOS時代。幸運的是Mac OS有了一個小巧的替代品:Hopper, 基本上知足了工做上的反彙編的須要,包括僞代碼以及控制流圖(Control Flow Graph),支持ARM指令集並對Objective-C的作了優化。app

 

先給張界面總覽(左側是符號列表,打開程序後,用工具欄最右側的Read Executable就能夠打開可執行程序分析):工具

 

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

下面以分析Crash Log爲例,展現下Hopper的使用。優化

 

在應用程序一個位置使用assert讓它崩掉,能夠獲得以下的Crash Log:spa

  Crash Log
  Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
  0   libsystem_kernel.dylib             0x981fd9c6 __pthread_kill + 10
  1   libsystem_c.dylib                  0x99692f78 pthread_kill + 106
  2   libsystem_sim_c.dylib              0x01e5a57b abort + 140
  3   libsystem_sim_c.dylib              0x01e3c286 __assert_rtn + 267
  4   BlogCounter                        0x000033c9
  5   BlogCounter                        0x00003362.net

 

打開Hopper,找到菜單Navigate->Go To Address or Symbolblog

 

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

在對話框輸入33c9,Hopper就會跳到程序崩的位置。get

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

生成僞碼看看編譯器

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

過短了! 和源代碼比比:編譯

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

 

 

 

顯然編譯器優化過了。由於assert(0)是穩定崩定的,因此下面的代碼都沒有生成。table

 

能夠將assert改成

  assert(URLString==nil);

 

再嘗試時,崩潰的位置已經變動(Mac OS有一項技術,程序和程序庫在加載時的地址是動態決定的)。咱們再看下新的代碼和控制流圖(CFG):

 

 

 

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

CFG:

 

IOS反彙編工具Hopper分析Crash Log - 凌晨四點半 - 凌晨四點半

 

官網: www.hopperapp.com

 

它用的反彙編引擎:

  http://www.beaengine.org/

 

轉載請註明出處: http://blog.csdn.net/horkychen

相關文章
相關標籤/搜索