[Mac OS/iOS]反汇编工具Hopper分析Crash Log

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:    在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使用。 强大的IDA大家可能已经知道,但它的Mac OS版本又让人回到了DOS时代。

  

在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使用。 强大的IDA大家可能已经知道,但它的Mac OS版本又让人回到了DOS时代。幸运的是Mac OS有了一个小巧的替代品:Hopper, 基本上满足了工作上的反汇编的需要,包括伪代码以及控制流图(Control Flow Graph),支持ARM指令集并对Objective-C的做了优化。

 

先给张界面总览(左侧是符号列表,打开程序后,用工具栏最右侧的Read Executable就可以打开可执行程序分析):

下面以分析Crash Log为例,展示下Hopper的使用。

 

在应用程序一个位置使用assert让它崩掉,可以得到如下的Crash Log:

  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

 

打开Hopper,找到菜单Navigate->Go To Address or Symbol

在对话框输入33c9,Hopper就会跳到程序崩的位置。

 

生成伪码看看

太短了! 和源代码比比:

显然编译器优化过了。因为assert(0)是稳定崩定的,所以下面的代码都没有生成。

 

可以将assert改为

  assert(URLString==nil);

 

再尝试时,崩溃的位置已经变更(Mac OS有一项技术,程序和程序库在加载时的地址是动态决定的)。我们再看下新的代码和控制流图(CFG):

CFG:

 


它用的反汇编引擎:

  http://www.beaengine.org/

 

转载请注明出处: http://blog.csdn.net/horkychen

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
48 0
|
1月前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
58 0
|
8天前
|
IDE Android开发 iOS开发
Android VS iOS:哪个操作系统更适合开发者?**
**在移动应用开发领域,Android和iOS是两大主流操作系统,它们各自拥有独特的特点和优势。本文探讨了Android和iOS操作系统在开发者视角下的差异与优劣,分析了它们在开发环境、用户群体、市场前景等方面的比较,帮助开发者选择最适合他们需求的平台。
15 2
|
16天前
|
安全 Java Android开发
Android 与 iOS:探索两大操作系统的差异与优势
本文将深入探讨安卓和iOS这两大主流移动操作系统的差异与优势。我们将分别从用户界面、应用生态系统、开发者支持以及性能与安全方面进行比较,帮助读者更好地了解并选择适合自己的操作系统。
18 0
|
16天前
|
Java Android开发 iOS开发
深入探讨移动操作系统的性能优化:安卓与iOS的对比分析
在现代移动设备中,操作系统的性能优化至关重要。本文从系统架构、内存管理、电池续航和应用程序运行效率等多个维度,深入探讨了安卓(Android)和iOS两大主流移动操作系统的优化策略及其实际效果,旨在为开发者和用户提供更清晰的了解和选择依据。
29 0
|
8天前
串口通讯工具minicom-在银河麒麟操作系统下的使用
在银河麒麟OS中调试神州数码网络设备,如CS6200交换机,使用`minicom`工具。连接CONSOLE线,打开终端,用`sudo minicom -s`进入配置。设置串口为`ttyUSB0`(用`ls /dev`查找),波特率设为115200。保存配置后,开始设备配置。
串口通讯工具minicom-在银河麒麟操作系统下的使用
|
17天前
|
搜索推荐 Android开发 iOS开发
深入解析安卓与iOS操作系统的异同
安卓和iOS是目前两大主流移动操作系统,它们分别代表了开放性和封闭性的设计理念。本文将从系统架构、用户界面、应用生态等方面深入探讨安卓和iOS之间的异同,帮助读者更好地理解这两个操作系统的特点和优势。
32 3
|
1月前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。
|
8天前
|
vr&ar Android开发 数据安全/隐私保护
探索移动操作系统的演进:从Android到iOS的技术革新
在移动操作系统的演进过程中,Android和iOS这两大平台凭借其独特的技术优势和丰富的生态系统,成为了全球智能手机市场的主导者。本文深入探讨了它们的发展历程及各自的技术特点。
11 0
|
1月前
|
前端开发 Android开发 开发者
移动应用开发的未来:跨平台工具的崛起与移动操作系统的融合
【5月更文挑战第27天】 随着智能手机和平板电脑成为全球用户日常互动不可或缺的设备,移动应用开发已经迅速成为了软件工程的一个重要分支。本文将探讨移动应用开发的最新趋势,特别是跨平台开发工具的日益普及和移动操作系统之间的融合现象。我们将分析如何通过这些工具简化开发流程,以及这种趋势对开发者社区和最终用户意味着什么。此外,我们还将讨论移动操作系统在功能和用户体验方面的逐渐趋同,并预测这一趋同可能对未来移动应用开发产生的影响。