从elf文件的DYNAMIC部分删除条目

dim*_*mba 5 linux linker gcc elf static-linking

我有第三方库一个,那需要一些库. A链接到binrary,它与静态版本B链接.因此,不再需要B的动态版本.

A不在我的控制之下,我无法重新编译它.因此,我想删除A的DYNAMIC部分的NEEDED libA条目.

有没有办法用objcopy或其他工具做到这一点?

Emp*_*ian 1

有没有办法用 objcopy 或其他工具来做到这一点?

我不知道有任何现有工具可以做到这一点,尽管elfsh可能可以。

编写一个 C 程序来执行您想要的操作非常简单:.dynamic的部分libA.so是固定大小记录(类型为 )的表ElfW(Dyn),以带有 的条目终止.d_type == DT_NULL。要删除特定DT_NEEDED条目,只需向上“滑动”所有后续条目(entry[n]用覆盖entry[n+1]等)。这将在最后留下.dynamic两个条目,但没有什么值得关心的。DT_NULL

一个复杂的情况是,如果libB.so包含引用的版本化符号,那么表中将libA.so会有额外的引用,而这些引用更难以删除。如果不删除引用,动态链接器将无法断言。libB.soDT_VERNEEDVERNEED