如何将动态链接的应用程序转换为静态链接的应用程序?

问题描述 投票:0回答:1

我有一个应用程序,比如 gedit,它是动态链接的,但我没有源代码。所以我不能按我喜欢的方式编译它。我想要做的是将其静态链接并将其移动到没有运行该应用程序所需的库的系统。那么是否可以做到以及如何做到?

linux shared-libraries static-libraries static-linking
1个回答
1
投票

理论上是可以的。您基本上必须执行与动态链接器相同的工作,但需要进行一些修改,即

  • 转储原始文件中的所有部分
  • 解析符号
  • 找到库
  • 不是将它们加载到内存中,而是将它们组装成“虚拟图像”
  • 解决内部链接
  • 将整个内容转储到一个独立文件中。

所以

objdump
readelf
objcopy
将成为您的一些朋友。

这项任务并不容易,结果既不是自动的,也不是(可能)稳定的。

您可能想通过其他尝试过相同操作的人检查此代码,实际上是拦截动态链接器(即上面的所有步骤,除了最后一个)并将结果转储到磁盘。

它基于这个工具,所以任何人都可以打赌它是否适用于最新的内核。

(可能不会 - 你至少需要修补它以反映新的结构。这是我的尝试这样做。买者自负)。

© www.soinside.com 2019 - 2024. All rights reserved.