Android NDK之Strip裁减so库

编程知识 更新时间:2023-04-17 19:55:04

1.Strip基本介绍

strip

在类Unix和Unix的操作系统中,strip程序可对可执行二进制程序和对象文件中,删除不必要的信息,从而带来更好的性能和减少磁盘空间的使用。“不必要的信息”指的是正常执行功能过程中,不需要的二进制信息,比方调试和符号信息。但该命令裁剪的程度,取决于开发者对这部分代码的具体实现。

此外,使用strip可提高二进制文件在逆向工程中的安全性。如果没有二进制文件的信息和对象的名称,分析它将更加困难

常用的strip 命令

  • strip - s xxx.so : 移除所有符号信息(会覆盖原有带符号表的so)
  • strip - S xxx.so: 移除调试符号信息
  • strip - s xxx.so -o yyy.so: 移除所有符号信息,裁减好后,输出指定名字的so

不同架构的strip

在Android 手机中 cpu 架构是各不相同的,因此不同架构下要使用各自的strip 裁减对应的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)

在计算机科学中,符号表(Symbol table)是语言翻译程序(如编译器或解释器)所使用的数据结构,其中程序源代码中的每个标识符(即符号)都与源代码中的声明或外观相关的信息相关联。换句话说,符号表的条目存储与条目对应符号相关的信息。

在这里插入符号表的实际使用:

  • 在android开发中,集成了bugly 异常上报的小伙伴,可能比较熟悉。为了定位每个版本中出现的native crash的位置,应该上传对应版本的符号表(即带有符号表的so库)。
  • 使用ndk-stack 处理native crash ,也是需要使用到带符号表的so库。

3.使用Strip裁减so库

拿到对应架构的so库,比如这里是arm64-v8a的so库进行 移除全部符号表 ,指定输出新的so库。

先知道arm64-v8a对应的strip 所在目录,执行以下命令:

效果如下图:

这里插入点小知识:在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/69912579/viewspace-2759124/

更多推荐

Android NDK之Strip裁减so库

本文发布于:2023-04-14 03:29:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/23c2039355ae781f30b3a7f93e9391af.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android   NDK   Strip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 74552文章数
  • 14阅读数
  • 0评论数