3

Linux:有没有办法编辑已编译的共享库?

具体来说,我正在搜索如何DT_SYMBOLIC flag在已编译的二进制共享库上添加?

这就是我问这个的原因

我们的应用程序由

  • 我们自己的库(静态libXXX.a)
  • 一些第 3 方库(仅二进制共享库 libYYY.so)

到目前为止,该应用程序一切正常。

现在我用共享库版本 (libXXX.so)替换了我们自己的静态* libXXX.a 库。

一切编译和链接都很好。

但是,当我现在运行应用程序时,它会启动并执行大量预期的处理 - 然后它在中途某处崩溃。gdb 回溯显示崩溃发生在某些第 3 方共享库中。

我在 SOF 上四处搜索,发现这里有一篇有趣的文章。

我指的提示是

... add the DT_SYMBOLIC flag to the dynamic section ...

尽管我怀疑它是否真的有帮助,但我认为它可能值得一试。

有什么想法可以DT_SYMBOLIC flag在已编译/链接的共享库上添加吗?

环境:debian lenny 64bit,带有 g++ v4.2.4 和 binutils v20。

编辑:在 solaris 上有一个名为elfedit. linux有类似的东西吗?

4

2 回答 2

2

同时,我发现了一个名为elfsh. 它是用于检查和编辑 ELF 对象、二进制文件和共享库的交互式 shell。

看到这里的项目页面:http ://www.eresi-project.org

不幸的是,它似乎不是很稳定。我自己经历过很多崩溃elfsh

于 2010-02-18T10:11:19.360 回答
0

如果它只是一个标志,那么痛苦的方法是使用十六进制编辑器调整你的精灵标题。

但是,如果 3rd 方库崩溃了,我会亲自看看事情的另一端:由于您转向共享,库加载顺序发生了什么变化。

ldd

导出 LD_DEBUG=libs

是你的朋友吗?

在运行时加载程序加载您的第 3 方库后,对您的共享库进行 dlopen() 操作可能就足够了。

于 2010-02-01T18:18:06.333 回答