solaris elfedit:linux有类似的功能吗?(共享库编辑器)?
Linux:有没有办法编辑已编译的共享库 具体来说,我正在搜索如何在已编译的二进制共享库中添加solaris elfedit:linux有类似的功能吗?(共享库编辑器)?,linux,g++,shared-libraries,ld,binutils,Linux,G++,Shared Libraries,Ld,Binutils,Linux:有没有办法编辑已编译的共享库 具体来说,我正在搜索如何在已编译的二进制共享库中添加DT_符号标志 这就是我问这个问题的原因: 我们的应用程序由 我们自己的库(staticlibXXX.a) 某些第三方LIB(仅二进制共享库libyy.so) 到目前为止,应用程序一切正常 现在,我已经用共享库版本(libXXX.so)替换了我们自己的static*libXXX.a库 一切都很好 但当我现在运行应用程序时,它会启动并执行许多预期的处理,然后在中途某个地方崩溃。gdb回溯显示崩溃发生在
DT_符号标志
这就是我问这个问题的原因:
我们的应用程序由
- 我们自己的库(staticlibXXX.a)
- 某些第三方LIB(仅二进制共享库libyy.so)
... add the DT_SYMBOLIC flag to the dynamic section ...
虽然我怀疑它是否真的有用,但我认为它可能值得一试
有没有办法在已经编译/链接的共享库中添加DT_符号标志
环境:使用g++v4.2.4和binutils v20的debian lenny 64位
EDIT:在solaris上有一个名为
elfedit
的程序。linux有类似的功能吗?如果只是一个标志,那么痛苦的方法就是用十六进制编辑器调整elf头
但是,如果第三方库崩溃了,我个人会看看事情的另一端:库加载顺序因为您转到共享而发生了什么变化
ldd
及
导出LD_DEBUG=libs
你的朋友在这里
dlopen()在运行时加载器加载第三方LIB后加载共享LIB可能就足够了。与此同时,我找到了一个名为
elfsh
的工具。它是一个交互式shell,用于检查和编辑ELF对象、二进制文件和共享库
有关项目页面,请参见此处:
不幸的是,它似乎不是很稳定。我在
elfsh
本身中经历了很多崩溃。感谢您提供有关库加载顺序的建议。但我担心我不得不使用你提到的“痛苦的方法”。非常感谢关于如何编辑elf标题的任何帮助!同样,我不能真的推荐这种方法,但如果我必须推荐的话,我会:1。阅读ELF规范2。构建一个包含和不包含-Bsymbolic的最小库,并检查二进制差异“…不能真正推荐这种方法…”。我同意。但是还是值得一试。有关于elfsh
的文档吗?它似乎是一个很棒的工具,只是它完全没有文档记录。