Linux 替换/覆盖静态链接库
我有一个由供应商提供的对象文件-Linux 替换/覆盖静态链接库,linux,static-libraries,gnu-toolchain,Linux,Static Libraries,Gnu Toolchain,我有一个由供应商提供的对象文件-foo.so。该对象文件与一个公开可用的库——bar_1.0.a静态链接。有一个新版本的库bar_1.1.a修复了一个关键的bug,但是供应商没有提供新版本的foo.so,所以我不能利用这个bug修复 由于我无法访问foo.so的源代码,因此无法针对新版本的bar重新编译。我确实可以访问bar的源代码,因此我可以随意构建它。bar中的符号在1.0和1.1之间没有变化,只有部分实现 我想知道是否有一种方法可以将foo.so中静态链接的bar_1.0.a库替换/覆盖为
foo.so
。该对象文件与一个公开可用的库——bar_1.0.a
静态链接。有一个新版本的库bar_1.1.a
修复了一个关键的bug,但是供应商没有提供新版本的foo.so
,所以我不能利用这个bug修复
由于我无法访问foo.so
的源代码,因此无法针对新版本的bar
重新编译。我确实可以访问bar
的源代码,因此我可以随意构建它。bar
中的符号在1.0和1.1之间没有变化,只有部分实现
我想知道是否有一种方法可以将foo.so
中静态链接的bar_1.0.a
库替换/覆盖为bar_1.1.a
,而无需访问foo.so
。或者,如果不可能,我是否可以强制foo.so
动态链接bar_1.1.so
,即使它与bar_1.0.a
静态链接
我知道有各种各样的
LD.*
环境变量会影响动态链接,但我不相信这对这种情况有帮助。我相信您正在寻找拦截或滑动。你对所有的导出进行阴影处理foo.so
,然后首先加载自己。您提供了该漏洞的更新例程。否则,将调用传递到原始的foo.so
。Valgrind等工具对某些系统调用(如malloc和free)使用类似的技术。我认为静态库bar.a
会让事情变得特别痛苦。