dim*_*mba 5 linux linker gcc elf static-linking
我有第三方库一个,那需要一些库乙. A链接到binrary,它与静态版本B链接.因此,不再需要B的动态版本.
A不在我的控制之下,我无法重新编译它.因此,我想删除A的DYNAMIC部分的NEEDED libA
条目.
有没有办法用objcopy或其他工具做到这一点?
有没有办法用 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.so
DT_VERNEED
VERNEED