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

简介:    在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日志并进行多维度分析。
目录
相关文章
|
3月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
82 0
|
3月前
|
Go 数据处理 Docker
elk stack部署自动化日志收集分析平台
elk stack部署自动化日志收集分析平台
79 0
|
3月前
|
缓存 固态存储 关系型数据库
MySQL性能优化指南:深入分析重做日志刷新到磁盘的机制
MySQL性能优化指南:深入分析重做日志刷新到磁盘的机制
|
2天前
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断2
工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
|
2天前
|
机器学习/深度学习 前端开发 数据挖掘
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
32 0
|
14天前
|
SQL 存储 监控
日志问题精要:分析与总结
该文档讲述了应用系统日志记录的重要性和规则。主要目的是记录操作轨迹、监控系统状态和回溯故障。日志记录点包括系统入口、调用其他模块、调用结束、出口和出错时。内容应遵循UTF-8编码,避免敏感信息,按INFO级别记录,及时、完整且安全。日志输出要控制频率和长度,不影响系统性能,并按策略备份和清理。日志等级分为DEBUG、INFO、WARN、ERROR和FATAL。日志文件应有明确目录结构,大小有限制,并定期清理。注意事项包括输出异常堆栈、避免打印对象实例的hashCode、选择合适的日志框架和格式,并支持动态修改日志级别。还要实现链路追踪,确保在多线程环境中正确记录日志。
16 0
|
1月前
|
存储
Hudi Log日志文件格式分析(一)
Hudi Log日志文件格式分析(一)
25 1
|
1月前
|
缓存 索引
Hudi Log日志文件写入分析(二)
Hudi Log日志文件写入分析(二)
20 1
|
1月前
|
缓存
Hudi Log日志文件读取分析(三)
Hudi Log日志文件读取分析(三)
22 0
|
3月前
|
存储 Java
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
jvm性能调优实战 - 23 模拟Young GC的发生及分析GC日志
44 0