日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android动态32位so,Android:动态库(.so)调试技巧

發布時間:2024/4/18 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android动态32位so,Android:动态库(.so)调试技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、反匯編定位crash

①查看crash log:

上圖已標出crash發生在 libdeflicker_gpu.so 庫中的 default_fail_func() 函數,但是 libdeflicker_gpu.so 是第三方動態庫,無法分析代碼,所以退一步到外層的調用代碼查找問題。

鏈接??libdeflicker_gpu.so 的動態庫是?com.arcsoft.node.deflickergpu.so,由自己封裝層代碼生成,從代碼查找到調用了?libdeflicker_gpu.so 的接口函數 ADF_Preview_Process_FD,crash的時候寄存器的值保存了下來,上圖黃框所示。

②使用ndk objdump工具反匯編libdeflicker_gpu.so庫(注意32/64位庫的工具版本不同):

D:AndroidSdk

dk-bundleoolchainsaarch64-linux-android-4.9prebuiltwindows-x86_64aarch64-linux-androidinobjdump.exe -d libdeflicker_gpu.so > objdump_libdeflicker.txt

從保存的 objdump_libdeflicker.txt 文本中找到 ADF_Preview_Process_FD 函數:

可看到函數起始地址為 056188(十六進制),crash地址為 = 056188(十六進制) + 12(十進制) = 0x056194

接著分析dump 文件可知,0056194處的指令是 stp?? ?x29, x30, [sp,#176],即把一對值x29和x30放到SP+176的地址,從函數的入口取值就發生了crash,說明傳入的參數有問題,一般是指針為空或指向了非法內存導致。

所以在調用層檢測傳入參數即可,比如是結構體,就把其中指針變量都打印出來確認一下是否有效。如果外層參數都沒問題,就說明第三方庫內部的bug,需要找提供庫的人進行排查。

技巧總結:先在crash匯編指令附近找特殊指令,如mla 乘加指令、64位乘法、移位等出現次數較少的指令,大致定位下crash范圍,然后逐行分析匯編找到精確的c/c++代碼位置。

二、查看動態庫符號表

(1)nm -D xxx.so

(2)readelf -s xxx.so

總結

以上是生活随笔為你收集整理的android动态32位so,Android:动态库(.so)调试技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。