在Mac OS下分析Crash Log有不少種方法,這裏不是要說明如何分析的Crash Log, 主要是展現下Hopper的使用。 強大的IDA你們可能已經知道,但它的Mac OS版本又讓人回到了DOS時代。幸運的是Mac OS有了一個小巧的替代品:Hopper, 基本上知足了工做上的反彙編的須要,包括僞代碼以及控制流圖(Control Flow Graph),支持ARM指令集並對Objective-C的作了優化。app
先給張界面總覽(左側是符號列表,打開程序後,用工具欄最右側的Read Executable就能夠打開可執行程序分析):工具
下面以分析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
在對話框輸入33c9,Hopper就會跳到程序崩的位置。get
生成僞碼看看編譯器
過短了! 和源代碼比比:編譯
顯然編譯器優化過了。由於assert(0)是穩定崩定的,因此下面的代碼都沒有生成。table
能夠將assert改成
assert(URLString==nil);
再嘗試時,崩潰的位置已經變動(Mac OS有一項技術,程序和程序庫在加載時的地址是動態決定的)。咱們再看下新的代碼和控制流圖(CFG):
CFG:
它用的反彙編引擎:
轉載請註明出處: http://blog.csdn.net/horkychen