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

时间:2013-06-30 13:14:31

标签: linux shared-libraries static-libraries

我有一个应用程序,比如gedit,它是动态链接的,我没有源代码。所以我不能像我喜欢的那样编译它。我想要做的是使其静态链接并将其移动到没有必要的库来运行该应用程序的系统。那么有可能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

理论上可行。你基本上必须完成与动态链接器相同的工作,并进行一些修改,即

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

所以objdumpreadelfobjcopy你朋友的某些

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

您可能希望通过实际拦截动态链接器(即上面的所有步骤,除了最后一步)将其他人尝试检出this code并将结果转储到磁盘。

它基于this tool,所以任何人都可以打赌它是否适用于最新的内核。

(它可能没有 - 你至少需要修补它以反映新的结构。这样做my attempt警告经纪人)。