预加载静态链接的C符号

时间:2012-09-15 15:17:01

标签: c preloading

是否可以预先加载静态链接的符号?

在linux中,我可以使用

LD_PRELOAD=libSomeLibrary.so ./anExecutableLinkedToAnOtherLibrary

但这仅在符号动态链接时才有效。现在我需要为可执行文件注入一些符号,其中符号静态链接到其他库。

我知道在一般情况下,这在理论上是不可能的,因为静态符号甚至可能已被内联。但是如果我们的调试版本没有包含优化和完整的调试符号,理论上可以在正确的位置注入符号。

我对linux和windows世界的答案感兴趣,但即使只是在linux中解决这个问题就足够了。

1 个答案:

答案 0 :(得分:2)

静态符号没有预加载机制,因为没有使用ld.so。操作系统只是将文件映射到内存中并开始执行它。

您可以修改二进制文件以包含新版本的库。一种方法是使用objcopy删除旧符号,然后使用ld链接新符号。