在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