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

时间:2013-01-23 12:09:34

标签: linux gcc linker static-linking elf

我有第三方库 A ,需要一些库 B A 链接到binrary,后者与静态版本 B 相关联。 因此,不再需要 B 的动态版本。

A 不受我的控制,我无法重新编译。因此,我想从 A DYNAMIC 部分删除NEEDED libA条目。

有没有办法用objcopy或其他工具来做?

1 个答案:

答案 0 :(得分:1)

  

有没有办法用objcopy或其他工具来做?

我不知道任何可以执行此操作的现有工具,尽管elfsh可能会这样做。

编写一个C程序来做你想做的事情是非常简单的:.dynamic的{​​{1}}部分是一个固定大小的记录表(类型为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引用,动态链接器将失败断言。