iOS崩溃日志符号化与崩溃分析

本文介绍了如何使用Hopper反汇编来分析iOS应用的崩溃日志,特别是涉及动态库的情况。首先解释了ASLR偏移、静态库和动态库的概念,接着详细阐述了使用Hopper进行反汇编的步骤,包括修改基地址、定位问题和分析汇编代码。同时,提供了获取ipa文件的两种方法——爱思助手和Apple Configurator 2。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 写在前面

1.1 名词解释

  • 模块基地址: 模块在内存中的起始地址

  • ASLR偏移: 虚拟内存起始地址与模块基地址的偏移量

ASLR(地址随机化)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的

  • 虚拟内存地址 = 模块基地址 + ASLR偏移

1.2 静态库与动态库

静态库: 静态库本质上类似于编译文件(*.o)的压缩包, 只是在链接过程中, 被合并到app的二进制,所以静态库具备"被吸附性"

动态库: 动态库是一个链接号的二进制文件, 会被整体载入内存, 而且不能被宿主App吸附. 和静态库不同, 动态库实在app启动的时候载入内存, 此时, 会将动态库的代码段载入到App虚拟内存中, 并且拥有独立的内存空间(动态库的数据段会在宿主App链接时提前做备份), 其基地址有别于宿主程序和其他动态库 所以使用hopper进行反汇编时, 如果是宿主程序, 需要使用宿主程序的基地地址, 相应的, 动态库需要使用动态库的基地址

在.crash文件的最下边, 可以找到宿主app和动态库的基地址:

  • 宿主程序: ZQMusic, 基地址: 0x102a7c000

  • 动态库: AgoraCore , 基地址: 0x1054d0000

  • 动态库: ZegoExpressEngine , 基地址:0x10709c000

参见

[iOS动态库、静态库及使用场景、方式](https://www.jianshu.com/p/4e0fd0214152)

[iOS程序员的自我修养](https://juejin.cn/post/6844903912143585288)

2. Hopper反汇编

2.1 前提

在使用[hopper](

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值