是否有可能(当前是否有任何工具能够这样做)在编译后可执行文件中的某些或所有动态库依赖项中静态链接?我的意思是修改可执行文件,而不是从源代码重新编译它。
例如,如果我编译a.out
并将其链接到sqlite,otool -L
(或ldd)将显示/usr/lib/libsqlite3.dylib
。
我正在讨论的修改是a.out + libsqlite3.dylib = b.out
在没有libsqlite3.dylib
的运行时依赖性的情况下采用的工具。
由于静态链接基本上是将库代码复制到可执行文件中,因此我无法想到libsqlite3.dylib
会遗漏libsqlite3.a
所拥有的某些代码的任何实例。
我可以想象一个非常丑陋的概念验证,其中动态链接器将从可执行文件中读取相关代码并将其伪装成动态库。
当然,这不适用于动态加载(例如dlopen)。