我有第 3 方库 A,它需要一些库 B。 A 链接到二进制文件,二进制文件链接静态版本B。 因此,不再需要 B 的动态版本。
A 不在我的控制之下,我无法重新编译它。因此,我想从 A 的 DYNAMIC 部分删除 NEEDED libA
条目。
有没有办法用 objcopy 或其他工具做到这一点?
最佳答案
Is there a way to do it with objcopy or other tool?
尽管 elfsh,我不知道有任何现有工具可以做到这一点或许可以。
编写一个 C 程序来做你想做的事情是很简单的:libA.so
的 .dynamic
部分是一个固定大小记录的表( type ElfW(Dyn)
), 由带有 .d_type == DT_NULL
的条目终止。要删除特定的 DT_NEEDED
条目,只需向上“滑动”所有后续条目(用 entry[n+1]
覆盖 entry[n]
> 等)。这将使您的 .dynamic
在末尾留下两个 DT_NULL
条目,但什么都不用关心。
一个复杂的问题是,如果 libB.so
包含 versioned libA.so
引用的符号,那么将有对 libB.so
在 DT_VERNEED
表中,这些更难摆脱。如果您不删除 VERNEED
引用,动态链接器将无法断言。
关于linux - 从 elf 文件的 DYNAMIC 部分删除条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14479394/