2

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

在linux中,我可以使用

LD_PRELOAD=libSomeLibrary.so ./anExecutableLinkedToAnOtherLibrary

但这仅适用于动态链接符号的情况。现在我需要将一些符号注入到一个可执行文件中,其中这些符号静态链接到其他一些库。

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

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

4

1 回答 1

2

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

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

于 2012-09-15T16:37:50.643 回答