在Android中剥离共享库的节头

时间:2018-07-11 11:48:07

标签: android cmake android-ndk elf strip

我在Android上有一个Java + NDK项目,其中有CMakeLists.txt个文件用于共享库,并且我想剥离.so文件的节头。我通过在sstrip文件中使用POST_BUILD作为add_custom_command来添加CMakeLists.txt和其他工具。编译后,我看到修补程序(剥离等)可以正常工作,但是出现类似lib.so: File truncated的错误,并且该应用程序根本无法运行,因为它无法加载.so文件。我刚在Android Studio的“运行”终端上收到Application terminated消息。

即使我更改了节标题中的某些值却没有删除它们,我仍然遇到类似的错误。

AFAIK执行或动态加载不需要节标题。 为什么没有部分标题的应用程序无法运行?

1 个答案:

答案 0 :(得分:2)

您不允许删除这些标头(source) :

  

每个ELF文件的节标题中都包含其他信息。这些标头现在必须存在,因为动态链接器使用它们进行完整性检查。一些开发人员尝试剥离它们以混淆二进制文件并防止反向工程。 (这并没有真正的帮助,因为可以使用广泛使用的工具来重建剥离的信息。)