[时间:2016-07] [状态:Open]
[关键词:android, 动态库,静态库, 编译,crash,addr2line]
本文主要整理Android编译系统中可用的库分析工作,可作为后续代码崩溃分析的参考。
- 动态库(*.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文件夹的根目录。
-
静态库(*.a)处理:
输出.a内所有导出函数。方法一:
arm-linux-androideabi-ar.exe -t xx.a > xx.txt
方法二:
arm-linux-androideabi-nm.exe xx.a > xx.txt -
ndk编译
上面两种库文件,.a和.so都可以直接通过arm-linux-androideabi-g++.exe
工具编译,编译语法跟linux上的g++一致。 也可以直接使用ndk-build
命令。 -
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的堆栈信息,必须包含:********************