• Android库分析工具(崩溃反编译)


    [时间:2016-07] [状态:Open]
    [关键词:android, 动态库,静态库, 编译,crash,addr2line]

    本文主要整理Android编译系统中可用的库分析工作,可作为后续代码崩溃分析的参考。

    1. 动态库(*.so)处理:
      arm-linux-androideabi-readelf.exe -a XX.so > xx.txt

    输出所有导出函数
    arm-linux-androideabi-objdump.exe -dx XX.so > xx.txt
    反汇编so包,此时使用 $(JNI_PROJ_PATH)objlocalarmeabi下面带符号表的so包。JNI_PROJ_PATH为编译so包时jni文件夹的根目录。

    1. 静态库(*.a)处理:
      输出.a内所有导出函数。方法一:
      arm-linux-androideabi-ar.exe -t xx.a > xx.txt
      方法二:
      arm-linux-androideabi-nm.exe xx.a > xx.txt

    2. ndk编译
      上面两种库文件,.a和.so都可以直接通过arm-linux-androideabi-g++.exe工具编译,编译语法跟linux上的g++一致。 也可以直接使用ndk-build命令。

    3. crash定位

    使用addr2line将地址转化成代码行数,输入的so为带符号表的,即为strip过的:

    arm-linux-androideabi-addr2line.exe -f -e jniobjlocalarmeabilibXX.so 00002683
    

    使用ndk-stack.exe还原堆栈:

    ndk-stack -sym E:dev_codeSosomap-oldSosomap-jniobjlocalarmeabi -dump D:android-ndk-r9b-windows-x86	xmap_log.txt
    

    -sym为带符号表的so路径, -dump为crash的堆栈信息,必须包含:********************

  • 相关阅读:
    vue简单分屏(1,4,9,16),全屏,还需要调整
    vue 中的Vuex实践
    常用工具类
    java Log日志规范
    spring中对象的注入方式
    不恰当的update语句使用主键和索引导致mysql死锁
    JPA规范及其它持久层框架
    webservice基本功能介绍
    Activiti工作流(二)之常用操作
    Activiti工作流(一)之基本操作介绍
  • 原文地址:https://www.cnblogs.com/tocy/p/android-crash_decompile-tool-cmd.html
Copyright © 2020-2023  润新知