是否可以预先加载静态链接的符号?
在linux中,我可以使用
LD_PRELOAD=libSomeLibrary.so ./anExecutableLinkedToAnOtherLibrary
但这仅在符号动态链接时才有效。现在我需要为可执行文件注入一些符号,其中符号静态链接到其他库。
我知道在一般情况下,这在理论上是不可能的,因为静态符号甚至可能已被内联。但是如果我们的调试版本没有包含优化和完整的调试符号,理论上可以在正确的位置注入符号。
我对linux和windows世界的答案感兴趣,但即使只是在linux中解决这个问题就足够了。
答案 0 :(得分:2)
静态符号没有预加载机制,因为没有使用ld.so。操作系统只是将文件映射到内存中并开始执行它。
您可以修改二进制文件以包含新版本的库。一种方法是使用objcopy
删除旧符号,然后使用ld
链接新符号。