我有一个应用程序,例如 gedit,它是动态链接的,但我没有源代码。所以我不能按我喜欢的方式编译它。我想要做的是将其静态链接并将其移动到没有运行该应用程序所需的库的系统。那么是否可以做到以及如何做到呢?
理论上是可能的。您基本上必须执行与动态链接器相同的工作,但需要进行一些修改,即
- 转储原始文件中的所有部分
- 解析符号
- 查找库
- 不是将它们加载到内存中,而是将它们组装成“虚拟图像”
- 解决内部链接
- 将整个内容转储到一个独立文件中。
So objdump
, readelf
, and objcopy
将some你的朋友。
这项任务并不容易,结果既不是自动的,也不是(可能)稳定的。
您可能想查看这段代码 http://www.ucc.asn.au/~dagobah/things/make-static.html由其他人尝试过同样的方法,实际上拦截动态链接器(即上述所有步骤,除了最后一个)并将结果转储到磁盘。
它是基于这个工具 https://cryopid.berlios.de/,所以任何人都可以打赌它是否适用于最新的内核。
(它可能不会 - 你至少需要修补它以反映新的结构。这是我的尝试 http://pastebin.com/CDZcmHJp这样做时。买者自负).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)