[時間: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)\obj\local\armeabi下面帶符號表的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 \jni\obj\local\armeabi\libXX.so 00002683
使用ndk-stack.exe還原堆棧:
ndk-stack -sym E:\dev_code\Sosomap-old\Sosomap-jni\obj\local\armeabi -dump D:\android-ndk-r9b-windows-x86\txmap_log.txt
-sym為帶符號表的so路徑, -dump為crash的堆棧信息,必須包含:********************