【问题标题】:Is the ELF .notes section really needed?真的需要 ELF .notes 部分吗?
【发布时间】:2012-03-13 03:50:15
【问题描述】:

在 Linux 上,我试图将静态链接的 ELF 文件剥离为基本要素。当我跑步时:

strip --strip-unneeded foo

或

strip --strip-all foo

生成的文件仍然有一个肥大的 .notes 部分,看起来充满了时髦的字符串。

.notes 部分真的需要吗?或者我可以用 --remove-section 安全地强制它吗?

感谢您的帮助。

【问题讨论】:

    标签: elf strip binutils sections


    【解决方案1】:

    根据经验和查看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 不知道删除它们是否安全。但根据我上面获取的信息,如果它是你自己的程序,几乎可以肯定删除它是安全的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2012-03-13
    • 2020-01-29
    • 2014-02-28
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多