我在Android上有一个Java + NDK项目,其中有CMakeLists.txt
个文件用于共享库,并且我想剥离.so文件的节头。我通过在sstrip
文件中使用POST_BUILD
作为add_custom_command
来添加CMakeLists.txt
和其他工具。编译后,我看到修补程序(剥离等)可以正常工作,但是出现类似lib.so: File truncated
的错误,并且该应用程序根本无法运行,因为它无法加载.so文件。我刚在Android Studio的“运行”终端上收到Application terminated
消息。
即使我更改了节标题中的某些值却没有删除它们,我仍然遇到类似的错误。
AFAIK执行或动态加载不需要节标题。 为什么没有部分标题的应用程序无法运行?
答案 0 :(得分:2)
您不允许删除这些标头(source) :
每个ELF文件的节标题中都包含其他信息。这些标头现在必须存在,因为动态链接器使用它们进行完整性检查。一些开发人员尝试剥离它们以混淆二进制文件并防止反向工程。 (这并没有真正的帮助,因为可以使用广泛使用的工具来重建剥离的信息。)