7

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

4

1 回答 1

1

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

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

所以objdump, readelf, 并且objcopy会成为你的一些朋友。

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

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

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

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

于 2013-06-30T13:37:37.480 回答