如何在不剥离其他符号的情况下删除特定的 ELF 部分?

How to remove a specific ELF section, without stripping other symbols?

我有一个包含 .eh_frame 部分的 ELF 32 位 x86 文件,尽管我尝试1 删除它。

我想删除 .eh_frame 部分,而不触及其他部分中的任何符号,包括未使用的符号。

strip好像没有选项--remove-only,老是修改其他section.

如何在不修改文件中任何其他内容的情况下删除单个 ELF 部分?

1正如 other questions 中所建议的,我尝试了 gcc-3.4.3 -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables 的几种变体,但 .eh_frame 部分始终存在。这可能是因为我必须使用旧的 GCC (3.4.3)...源文件本身不包含任何可能需要这些部分的特殊内容:int main() { return 0; }.

strip,尽管名称如此,但在此处并不是正确的工具。

一个可能的解决方案是objcopy --remove-section .eh_frame a.out,其中a.out是要修改的ELF文件的名称。

不幸的是,除非您了解 objcopy,否则您可能最终会搜索 strip 的解决方案,但没有找到任何解决方案。