5

我有 3rd 方库A,需要一些库BA链接到二进制文件,二进制文件与静态版本B链接。因此不再需要B的动态版本。

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

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

4

1 回答 1

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包含引用的版本化符号,那么在tablelibA.so中会有额外的引用,而这些更难摆脱。如果你不摆脱引用,动态链接器将失败断言。libB.soDT_VERNEEDVERNEED

于 2013-01-25T07:07:04.880 回答