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

我有第三方库A ,这需要一些库B。 A链接到与静态版本B链接的binrary。 因此在B的dynamic版本中不再需要。

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

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

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

我不知道任何现有的工具,可以做到这一点,虽然elfsh可能能够。

编写一个C程序来做你想做的事情是相当简单的: libA.so.dynamic部分是一个固定大小的记录(类型为ElfW(Dyn) )的表,由一个条目终止,该条目使用.d_type == DT_NULL 。 为了摆脱特定的DT_NEEDED条目,只需简单地“滑动”所有下面的条目(用entry[n+1]覆盖entry[n]等)。 这将在两个DT_NULL条目结尾处留下您的.dynamic ,但没有任何关系。

一个复杂的情况是,如果libB.so包含libA.so引用的版本化符号,那么在DT_VERNEED表中会有额外的对libB.soDT_VERNEED ,这些更难以摆脱。 如果你没有摆脱VERNEED引用,动态链接器将失败断言。