Android APP native 崩溃分析之令人困惑的 backtrace

原文地址:caikelun.io/post/2019-0…

完美无缺的代码逻辑,一定能产生完美无缺的程序吗?答案是否定的。从软件的层面来看,也许只有二进制才永远不会欺骗你。

现象

近期,业务方反馈了一个奇怪的崩溃问题,认为信息不足,无法解决。

Signal: 11 (SIGSEGV), Code: 1 (SEGV_MAPERR), fault addr 0x1

r0  993ff520  r1  dc3170c4  r2  00000000  r3  dabe3e08
r4  993ff520  r5  00000005  r6  00000290  r7  000007ac
r8  e83253a0  r9  00006aba  r10 bf921e39  r11 e83253a0
ip  bfa3a9e0  sp  993ff494  lr  bf88a71d  pc  bf96c31c

#00 pc 001a731c  /data/data/com.package.name/files/download/libmcto_media_player.so
#01 pc 0020b7e5  /data/data/com.package.name/files/download/libmcto_media_player.so

#00  993ff494  0000022c
     993ff498  adcfd000  [anon:libc_malloc]
     993ff49c  bf88a71d  /data/data/com.package.name/files/download/libmcto_media_player.so
     993ff4a0  ffffffff
     993ff4a4  ffffffff
     993ff4a8  bf9d07e7  /data/data/com.package.name/files/download/libmcto_media_player.so
#01  993ff4ac  00000000
     993ff4b0  00000000
     993ff4b4  00000000
     993ff4b8  00000000
     993ff4bc  00000000
     993ff4c0  adcfd234  [anon:libc_malloc]
     993ff4c4  00000000
     993ff4c8  0000006e
     993ff4cc  00000000
     993ff4d0  adcfdf6c  [anon:libc_malloc]
     993ff4d4  00000000
     993ff4d8  00000000
     993ff4dc  00000000
     993ff4e0  00000000
     993ff4e4  00000000
     993ff4e8  00000000
复制代码

第一感觉这肯定是动态库的业务逻辑有 bug,导致了段错误。backtrace 确实是不完整的,但一下也看不出为什么不完整,确实需要协助分析一下。

分析

backtrace 不完整的常见原因

backtrace 不完整的情况时有发生,常见的原因有:

  • 崩溃时 stack 内存被大量误写。如果崩溃点附近的逻辑正在处理的外部输入随机性很大,情况就更加糟糕,往往会看到大量离散的不完整 backtrace。举例:
#00 pc 00000ffb  <anonymous:c34fe000>
#01 pc 0009a885  /data/app/com.package.name-1/lib/arm/libjsc.so
#02 pc 0003ff93  /data/app/com.package.name-1/lib/arm/libjsc.so
#03 pc 0011f60f  /data/app/com.package.name-1/lib/arm/libjsc.so
#04 pc fffffffb  <unknown>
复制代码
#00 pc 000092fe  <anonymous:c15d0000>
#01 pc 00099ec3  /data/app/com.package.name-1/lib/arm/libjsc.so
#02 pc 00003ffe  <anonymous:bf140000>
复制代码
#00 pc 00000ffb  <anonymous:ef304000>
复制代码
  • 调用路径上的某些 ELF 文件的 unwind table 不完整。比如某些系统的 odex/oat,还有系统的 WebView Chromium,都属于此类。举例:
#00 pc 00d12bcc  /system/lib/libwebviewchromium.so
复制代码
#00 pc 01a0cf72  /system/app/WebViewGoogle/WebViewGoogle.apk!libwebviewchromium.so (offset 0x46da000)
复制代码
#00 pc 00006fde  /data/app/com.package.name-1/lib/arm/libcros.so
#01 pc 00007007  /data/app/com.package.name-1/lib/arm/libcros.so
#02 pc 00007023  /data/a
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值