在Linux上,我试图带一个静态连接的小精灵的文件裸露的必需品。当我运行:

strip --strip-unneeded foo

strip --strip-all foo

生成的文件仍然具有的脂肪。注意到部分,似乎是充分的时髦字符串。

是的.注意到部分真正需要或者我可以安全力量与--删除部分?

谢谢你任何帮助。

有帮助吗?

解决方案

从经验,并从在寻找的男人页 strip, 它看起来像 strip 是不是 应该 摆脱任何和所有部分和串,不需要;只是 符号.谈论男人页:

   GNU strip discards all symbols from object files objfile.

这就是说,从以往的经验, strip, 即使没有 --strip-all, 删除部分不需要为装载的,例如 .symtab.strtab, 和你可以,因为你注意到,删除的部分,你想要它 --remove-section.

作为一个例子一个 .notes 部分,我参加了 /bin/ls 从我Ubuntu11.10 64位框:

$ readelf -Wn /bin/ls

Notes at offset 0x00000254 with length 0x00000020:
  Owner                 Data size   Description
  GNU                  0x00000010   NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 2.6.15

Notes at offset 0x00000274 with length 0x00000024:
  Owner                 Data size   Description
  GNU                  0x00000014   NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 3e6f3159144281f709c3c5ffd41e376f53b47952

这涵盖了 .note.ABI-tag 部分和 .note.gnu.build-id 部分。它看起来像它们所包含的数据,不必要的负载的程序,但还不是标准的,是不知道的 strip 要不是必要的适当运行的程序,因为一个精灵可能有任何数量的附加"未知"部分,没有安全的清除。因此,而使用一个虚拟白名单(这将惨遭失败),它使用一个黑名单的部分,它知道它可以摆脱,而这样做。

短短的版本:这些部分似乎并不是标准,可用于各种各样的事情,所以 strip 不能知道它是安全的,以消除它们。但基于信息的内部一个我带上,如果这是你自己的程序,它几乎肯定安全删除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top