Solaris elf编辑:linux 有类似的东西吗?(共享库编辑器)?
-
24-09-2019 - |
题
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 64 位,带有 g++ v4.2.4 和 binutils v20。
编辑:在solaris上有一个程序叫做 elfedit
. 。linux 有类似的东西吗?
解决方案
同时我发现了一个名为 elfsh
. 。它是一个交互式 shell,用于检查和编辑 ELF 对象、二进制文件和共享库。
请参阅此处的项目页面: http://www.eresi-project.org
不幸的是,它似乎不太稳定。我经历过很多次崩溃 elfsh
本身。
其他提示
如果它只是一个标志,痛苦的方法是使用十六进制编辑器调整你的精灵头。
但如果第 3 方库崩溃了,我个人会看看事情的另一端:由于您转向共享,库加载顺序发生了哪些变化。
LDD
和
导出 LD_DEBUG=库
你的朋友在这里吗?
在运行时加载器加载第 3 方库后,dlopen() 处理您的共享库可能就足够了。
不隶属于 StackOverflow