反编译之崩溃定位

news2024/11/19 5:48:10

反编译之崩溃定位

  • 1.背景
  • 问题定位
    • 1.首先我们需要找崩溃所在的类和方法
    • 2.寻找崩溃的代码行数
      • 2.1借用反编译工具jadx查看反编译后的内容

1.背景

线上出了个崩溃(量挺大😭),但是apk是被混淆过的,一时摸不着头脑。崩溃信息如下:
崩溃信息
主要就是一个再常见不过的空指针的崩溃,
—java.lang.NullPointerException: Attempt to invoke virtual method ‘int java.lang.String.length()’ on a null object reference

若要定位代码所在位置,主要就是看com.jd.lib.mylive.e.d.s.onBindViewHolder(SourceFile:169)这一行,这就是我们崩溃的最终地方,但是路径被混淆了,而且代码行位置也看不出任何信息。这就让我们很头大了,如何才能找到最终的代码报错位置呢?

问题定位

这里我们分两步定位,第一步是找到崩溃的类和方法,第二是找到崩溃的代码行数。

1.首先我们需要找崩溃所在的类和方法

既然路径是被混淆的,首先我们需要根据混淆的mapping文件来还原出崩溃路径。
mapping文件一般的位置在

/app/build/outputs/mapping/release/mapping.txt

根据mapping文件我们很容找到路径对应的类为NewLiveCartSkuViewHolder:
根据混淆文件找到对应类
接下来我们需要分析一下崩溃的行数在哪一行。

2.寻找崩溃的代码行数

寻找崩溃的代码行数就没那么容易,也就是本文的重点-反编译。
因为报错信息(SourceFile:169)给到的行数并不是真实代码所在的行数,而是编译混淆后class文件里面崩溃的行数。因此,若要定位到行数,我们必须先将apk进行反编译,然后将反编译后的dex转成jar,最后分析jar文件来定位崩溃的具体位置。

2.1借用反编译工具jadx查看反编译后的内容

这里我们推荐一个很好用的反编译开源工具jadx,路径如下

https://github.com/skylot/jadx

用这个工具我们只需要将apk,倒入即可看到反编译后的结果,不过有的方法和类可能反编译不出来
jadx展示
下面是反编译后的结果
反编译后的结果
首先我们根据混淆的路径来找到我们想要定位的类和方法的大致位置,然后我们借助右下角的code或者simple那一栏来进行问题的定位,如果code里面的方法没被反编译出来,我们可以尝试在simple那一栏里面找,我这里就遇到了clode栏没被反编译出来的情况,因此我从simple栏找到了对应的方法,如下图
找到崩溃的方法
最后我们只需要找到169行,即可找到崩溃具体的位置,这里我们需要注意一下左边的行数,一定要点击左侧tab并确定行数切换到了从方法开始计算行数的模式,因为崩溃信息中(SourceFile:169)169所指的行数表示的是从崩溃所在的方法开始计数的行数,且必须是源文件中的行数。由于jadx显示的是反编译过后的文件代码(目的是方便我们阅读),且它已经帮我们标记好了反编译前的行号,因此我们只需要在onBindViewHolder中找到反编译前的行号就能找到崩溃的位置。
找到编译代码的行号
如上图,我们找到了行号在169的位置,发现该行做了判断一个字段的长度,如果price为空,那么就会发生nullPointException,正好对应了上面的崩溃信息String.length()的空指针崩溃。
最后们回归到源代码中找到了此行,
源码验证代码
问题得到验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yum 快速安装zookeeper、Kafka集群部署 es安装 logstash安装 kibina 分词器 redis

Zookeeper安装 Kafka是基于Zookeeper来实现分布式协调的,所以在搭建Kafka节点之前需要先搭建好Zookeeper节点。而Zookeeper和Kafka都依赖于JDK,我这里先安装好了JDK: 安装jdk yum install java-1.8.0-openjdk* -y 1 [root192.168.99.4 ~]#…

OpenCascade模型解析-详细分解模型结构

OpenCascade提供了gp_trsf、BRepBuilderAPI_Transform,可以用来实现拓扑(TopoDS_Shape)的变换:平移,(点,轴,面)镜像,旋转,缩放,移位。…

21 mysql ref 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 此系列文章建议从 mysql const 查询 开始看 测试表结构…

爬虫 — Scrapy 框架(一)

目录 一、介绍1、同步与异步2、阻塞与非阻塞 二、工作流程三、项目结构1、安装2、项目文件夹2.1、方式一2.2、方式二 3、创建项目4、项目文件组成4.1、piders/__ init __.py4.2、spiders/demo.py4.3、__ init __.py4.4、items.py4.5、middlewares.py4.6、pipelines.py4.7、sett…

微信小程序开发:新手必备套餐(一)项目环境的搭建

第一步:注册小程序账号 这个专栏的使用的app是微信,微信小程序则是当今社会web小程序开发中最为主流的app 1:进入网页完成账户的注册微信公众平台 点击立即注册 继续完成之后直接登录即可 登录成功之后 第二步:下载小程序开…

【机器学习】回归问题实例(李宏毅老师作业1)

文章目录 任务介绍完成和调参 任务介绍 问题描述 给出美国某一州过去3天的调查结果,然后预测第3天新检测阳性病例的百分比。 数据相关特征feature States(34, encode to one-hot vectors) 34个州COVID-like illness&#xff0…

使用patch-package保存node_modules包修改

遇到情况,第三方包存在bug或者缺少文件时候,我们手动修改了某个包时候,下次npm安装时候会导致原来的修改呗覆盖 安装 这时候可以用到npm工具包patch-package,项目更目录命令行安装 npm i -D patch-package修改文件 修改好nod…

3D虚拟情景实训系统在英语课堂教学中的应用

3D虚拟情景实训系统在英语课堂教学中的应用,为学生们提供了一个真实且生动的学习环境。 在课堂教学中,系统会模拟各种情景,如商务会议、旅行、饭店订房等,学生可以亲身参与体验学习,从而提高他们的英语口语和听力能力。…

【C++】vector中的常见函数和使用

前言 感觉vector在目前阶段很常用,就总结记录一些vector的用法 方便自己忘记的时候查找 因为是自用,所以我直接放代码了,只说明如何使用,以及一些小的注意点,对于函数具体实现过程,在这篇文章中&#xff…

Spring Boot自动装配原理超详细解析

目录 前言一、什么是SPI?1. JDK中的SPI2. Spring中的SPI2.1 加载配置2.2 实例化 二、Import注解和ImportSelector是什么?1. 代码示例2. 过程解析3. 源码分析 三、Spring Boot的自动装配1.源码分析2.代码示例3.Spring Boot自带的自动装配 四、总结 前言 …

LabVIEW报表生成工具包时出现错误-41106

LabVIEW报表生成工具包时出现错误-41106 使用LabVIEW报表生成工具包创建Excel报告或Word文档时,收到以下错误:Error -41106 occurred at NI_Excel.lvclass:new report subVI.vi ->NI_report.lvclass:New Report.vi -> Export Report With JKI.vi …

【Vue】模块基本语法「上篇」

【Vue】模块基本语法「上篇」 一、插值1.1 文本1.2 v-html1.3数据双向绑定(v-model) 二、指令2.1 v-if|v-else|v-else-if2.2 v-show2.3 v-for2.4 动态参数 三、过滤器3.1 局部过滤器3.2 全局过滤器 四、计算属性&监听属性4.1 计算属性4.2 监听属性 五、案例实操5.1 购物车案…

怒刷LeetCode的第6天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表 方法二:逐个判断字符 方法三:模拟减法 第二题 题目来源 题目内容 解决方法 方法一:水平扫描法 方法二:垂直扫描法 方法三:分治法 方…

2023-09-22 LeetCode每日一题(将钱分给最多的儿童)

2023-09-22每日一题 一、题目编号 2591. 将钱分给最多的儿童二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。 你…

华为OD机试 - 事件推送(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多…

联合作战模式下的信息过滤方法

源自:《指挥信息系统与技术》 作者:马雷鸣,张道伟 “人工智能技术与咨询” 发布 摘要 引言 1 相关工作 2 基于虚词的信息过滤方法 图1 本文方法流程 2.1 云-边-端架构 图2 云-边-端架构 2.2 作战信息特征提取 图3 常用虚词表 2.3 …

数字藏品系统平台怎么样挣钱?

数字藏品系统平台是为用户提供数字艺术品、收藏品、虚拟物品等数字化资产的交易和管理服务的平台。这类平台通常有以下方式来挣钱: 1.手续费:平台可以在用户之间进行数字藏品的买卖交易时收取手续费。这通常是基于交易金额的一定比例或固定费用。这是数字…

华为全联接大会2023 | 尚宇亮:携手启动O3社区发布

2023年9月20日,在华为全联接大会2023上,华为正式发布“联接全球服务工程师,聚合用户服务经验”的知识经验平台,以“Online 在线、Open 开放、Orchestration 协同”为理念,由华为、伙伴和客户携手,共同构建知…

Mysql 按照每小时,每天,每月,每年,不存在数据也显示

文章目录 按照每小时按照每天按照每月 按照每小时 SELECTdate : date_add( date, INTERVAL 1 HOUR ) AS DAY FROM( SELECT date : DATE_ADD( 2023-09-22, INTERVAL - 1 HOUR ) FROM xt_user LIMIT 24 ) t按照每天 SELECTdate : date_add( date, INTERVAL 1 day ) AS DAY FRO…

量子计算基础知识—Part1

1.什么是量子计算机? 量子计算机是基于量子力学原理构建的机器,采用了一种新的方法来处理信息,从而使其具有超强的功能。量子计算机使用Qubits处理信息。 2. 什么是量子系统? 一个量子系统指的是由量子力学规则描述和控制的物理…