Android NDK之Strip裁减so库
1.Strip基本介紹
strip:
在類Unix和Unix的操作系統(tǒng)中,strip程序可對可執(zhí)行二進(jìn)制程序和對象文件中,刪除不必要的信息,從而帶來更好的性能和減少磁盤空間的使用?!安槐匾男畔ⅰ敝傅氖钦?zhí)行功能過程中,不需要的二進(jìn)制信息,比方調(diào)試和符號信息。但該命令裁剪的程度,取決于開發(fā)者對這部分代碼的具體實(shí)現(xiàn)。
此外,使用strip可提高二進(jìn)制文件在逆向工程中的安全性。如果沒有二進(jìn)制文件的信息和對象的名稱,分析它將更加困難
常用的strip 命令:
- strip - s xxx.so : 移除所有符號信息(會覆蓋原有帶符號表的so)
- strip - S xxx.so: 移除調(diào)試符號信息
- strip - s xxx.so -o yyy.so: 移除所有符號信息,裁減好后,輸出指定名字的so
不同架構(gòu)的strip
在Android 手機(jī)中 cpu 架構(gòu)是各不相同的,因此不同架構(gòu)下要使用各自的strip 裁減對應(yīng)的so庫。
這里介紹下,主流適配是armv7和armv8 的ndk位置:
- armv8的strip位于:xxx\sdk\ndk\22.1.7171670\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-strip.exe
- armv7的strip 位于:xxx\sdk\ndk\22.1.7171670\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-strip.exe
簡單介紹完strip命令后,還得先了解下符號表。
2.符號表(Symbol table):
在計算機(jī)科學(xué)中,符號表(Symbol table)是語言翻譯程序(如編譯器或解釋器)所使用的數(shù)據(jù)結(jié)構(gòu),其中程序源代碼中的每個標(biāo)識符(即符號)都與源代碼中的聲明或外觀相關(guān)的信息相關(guān)聯(lián)。換句話說,符號表的條目存儲與條目對應(yīng)符號相關(guān)的信息。
在這里插入符號表的實(shí)際使用:
- 在android開發(fā)中,集成了bugly 異常上報的小伙伴,可能比較熟悉。為了定位每個版本中出現(xiàn)的native crash的位置,應(yīng)該上傳對應(yīng)版本的符號表(即帶有符號表的so庫)。
- 使用ndk-stack 處理native crash ,也是需要使用到帶符號表的so庫。
3.使用Strip裁減so庫
拿到對應(yīng)架構(gòu)的so庫,比如這里是arm64-v8a的so庫進(jìn)行 移除全部符號表 ,指定輸出新的so庫。
先知道arm64-v8a對應(yīng)的strip 所在目錄,執(zhí)行以下命令:
效果如下圖:
這里插入點(diǎn)小知識:在android studio中通過c++代碼編譯出strip 的so庫,可以在cmake-list中添加:
#set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s") #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")參考教程:
- http://blog.itpub.net/69912579/viewspace-2759124/
總結(jié)
以上是生活随笔為你收集整理的Android NDK之Strip裁减so库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cadence OrCAD/PSpice
- 下一篇: android sina oauth2.