当前位置: 首页 > news >正文

Unity 通过解析libil2cpp.so文件查看Android Crash崩溃原因

Unity 通过解析libil2cpp.so文件查看Android Crash崩溃原因

https://blog.csdn.net/smile_Ho/article/details/107432806

Unity 通过解析libil2cpp.so文件查看Android Crash崩溃原因
置顶 少侠Smile丶 2020-07-18 19:20:07 2184 收藏 3
分类专栏: Unity Android 文章标签: unity Android CRASH IDA libil2cpp
版权

近期项目出现了网络状态切换时,android手机会出现高概率崩溃的情况。话不多说,直接上crash日志:

E/CRASH: signal 6 (SIGABRT), code 0 (?), fault addr --------
在这里插入图片描述
出现这种CRASH,网上也都有详细介绍,一搜一大堆介绍,但对我排错没啥帮助,不是重点,这里跳过。
然后我们筛选崩溃的这个线程的日志,会从里面找到这个线程crash之前的一些操作日志,比如:
在这里插入图片描述
前面的是执行堆栈地址,由下往上执行的,后面是执行所在的库文件,我们找到libil2cpp.so的日志,这里面是我们的游戏主逻辑代码。
如果有大佬可以通过这些简单的日志(外加游戏自身的log)判断出问题所在,从这里可以return了。

接下来,我们要做的就是
1】利用IDA解析libil2cpp.so文件
2】利用Il2CppDumper.exe读取global-metadata.dat文件中的信息,获取我们项目文件源代码以及偏移地址。

Unity在生成libil2cpp.so时,同时会在目录assets\bin\Data\Managed\Metadata下生成资源文件global-metadata.dat。游戏中使用的字符串都被保存在了一个叫global-metadata.dat的资源文件里(对应关系),只有在动态运行时才会将这些字符串读入内存。这使得用IDA对游戏进行静态分析变得更加困难。那么为了解决这个困难,有人造了轮子,即Il2CppDumper.exe。此可读取global-metadata.dat文件中的信息,并与libil2cpp.so结合起来。这样可以根据地址定位到我们的源代码。

所需要的工具以及文件列表整理好了,请查收。
链接:https://pan.baidu.com/s/1jbnymRshJaLuPX_G35Nz6A
提取码:kkgh

首先第一步,我们安装并打开IDA,直接将apk拖入IDA内即可,自己会处理的(解析后选择libil2cpp.so 或者直接将libil2cpp.so拖入)。
第二步,打开Il2CppDumper.exe,先选择libil2cpp.so文件,再选择global_metadata.bat文件,后面自己会处理的。
处理完成,会生成一个dump.cs文件(还会生成很多东西,有兴趣可以自己尝试),这就是我们逻辑代码的一些信息(地址偏移)
第三步,我们随便找到一个崩溃日志里的地址016932dc,回到IDA中,在IDA View-A栏中按g输入,回车,就找到了这个地址的实际执行位置,如果后面是sub_xxx格式的,xxx就是地址偏移,复制sss,回到dump.cs文件中搜索,就能找到这个方法了。
(有兴趣的可以看下这些汇编语言,还挺有意思的。)

在这里插入图片描述
继续在IDA的界面往上拖动,找到该方法是从哪里调用的。
在这里插入图片描述
在dump.cs中搜索1692D70,找到调用的方法
在这里插入图片描述
完美,原来是这个方法。(如此往复,把这一连串的地址都查一遍把,你认识的堆栈就出来了,完美解决。)
PS:有一些查不到的不用管,我们只要查到几个我们认识的方法,相信你心中定会有了答案的。

好了,以上就是通过解析libil2cpp.so文件查看Android Crash崩溃原因,毫不夸张的说,熟练应用反编译libunity.so文件查看崩溃原因后,就像是学会了万能方法,再也不怕任何崩溃的出现了。
————————————————
版权声明:本文为CSDN博主「少侠Smile丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/smile_Ho/article/details/107432806

 

 

 

 

相关文章:

  • Android native memory leak detect (Android native内存泄露检测)
  • Android死锁初探
  • Unity Profile 自己使用
  • iOS性能分析-Xcode Instruments Allocations 分析APP内存使用情况
  • UE 手游在 iOS 平台运行时内存占用太高?试试这样着手优化
  • UE4 Sequence学习笔记
  • UE4中的相机操控方案
  • 对ue4 sequence的学习和理解
  • [gdc19]《战神4》中的全局光照技术
  • 5 种避免使用 C# lock 关键字的方法
  • [玩转UE4动画系统>功能模块] 之 Advanced Locomotion System V4 的工具函数及工具宏详解
  • Lua5.4新特性
  • 探究光线追踪技术及UE4的实现 -- good
  • Unity游戏项目性能优化总结
  • 【UE4源代码观察】观察DDC(DerivedDataCache)
  • 【Linux系统编程】快速查找errno错误码信息
  • interface和setter,getter
  • iOS 系统授权开发
  • Javascript弹出层-初探
  • Linux中的硬链接与软链接
  • MySQL的数据类型
  • PHP面试之三:MySQL数据库
  • 阿里云前端周刊 - 第 26 期
  • 缓存与缓冲
  • 免费小说阅读小程序
  • 目录与文件属性:编写ls
  • 微信公众号开发小记——5.python微信红包
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 项目管理碎碎念系列之一:干系人管理
  • 再次简单明了总结flex布局,一看就懂...
  • 最近的计划
  • 回归生活:清理微信公众号
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #预处理和函数的对比以及条件编译
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $jQuery 重写Alert样式方法
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (12)目标检测_SSD基于pytorch搭建代码
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Java)【深基9.例1】选举学生会
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)计算机毕业设计ssm电影分享网站
  • (蓝桥杯每日一题)love
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)Linux网络编程入门
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .Mobi域名介绍
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Remoting学习笔记(三)信道
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET成年了,然后呢?