真的需要ELF .notes部分吗?

时间:2012-02-22 18:59:32

标签: elf strip binutils sections

在Linux上,我试图将静态链接的ELF文件剥离到最基本的东西。我跑的时候:

strip --strip-unneeded foo

strip --strip-all foo

结果文件仍然有一个胖的.notes部分,似乎充满了时髦的字符串。

.note部分真的需要,还是我可以用--remove-section安全地强制它?

感谢您的帮助。

1 个答案:

答案 0 :(得分:6)

根据经验和查看strip的手册页,看起来strip不是假设来摆脱任何和所有的部分和字符串不需要;只需符号。手册页:

   GNU strip discards all symbols from object files objfile.

话虽如此,根据经验strip,即使没有--strip-all,也会删除不需要加载的部分,例如.symtab.strtab,您可以像请注意,使用--remove-section删除您想要的部分。

作为.notes部分的示例,我从我的Ubuntu 11.10 64位框中获取/bin/ls

$ 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不知道正确运行程序所必需的数据,因为ELF可以有任何数量的其他“未知”部分,不安全删除。因此,使用虚拟白名单(可能会失败),它会使用它知道可以摆脱的部分黑名单,并且这样做。

简短版本:这些部分似乎不是标准的,可以用于各种事情,因此strip无法知道删除它们是安全的。但根据我上面提到的信息,如果它是你自己的程序,删除它几乎肯定是安全的。