使专有的ELF可执行文件的便携式Linux上(making proprietary ELF bina

2019-07-21 12:04发布

我正在寻找一种方法,使现有的专有ELF二进制代码,这两篇文章对系统库的特定版本,便于携带。 随着便携式我的意思是让使用相同的处理器架构和兼容的系统内核的每个系统上的可执行的工作,而不必库的源代码(如果不具有源代码没有办法,这将是罚款太) 。

到目前为止,我想到了两种可能性,但我不知道他们是否在所有可能的,如果是,它可以选择:

  1. 搜索所有链接库和他们的依赖,并将其包含在二进制的子目录,并更改库路径到该目录。
  2. 重新链接库静态到二进制文件,一个大的可执行文件(如果程序不验证本身基于校验)。

授权是因为我不希望分发所创建的可移植的程序没有问题,它是唯一的私人使用。

谢谢您的回答。

Answer 1:

搜索所有链接库和他们的依赖,并将其包含在二进制的子目录,并更改库路径到该目录。

这将适用于大多数共享库,但不会为工作libc.so.6 (这是一个最容易产生问题,如果你的目标系统没有足够新的版本)。

其原因是:glibc的包含超过200单独的共享库,在它们之间具有未版本二进制接口,并且不具有在它们之间的稳定的ABI。 正因为如此,glibc的所有部分都必须来自同一版本。 其中一个部分是libc.so.6 。 另一种是ld-linux.so 。 后者的绝对路径是硬编码到每一个动态可执行文件。 最终结果是:如果你提供你自己的副本libc.so.6 ,如果该副本不匹配/lib/ld-linux*.so.2存在于系统中,然后你会看到很奇怪的崩溃,其你会是很艰难的时间来解释或调试。

重新链接库静态到二进制文件,一个大的可执行文件。

这不能不是AIX以外的任何UNIX系统上工作:他们都考虑a.outfoo.so最后一个环节的产品,这是不能被任何进一步的联系。

存在statifier ,它不创建一个(巨大)的静态可执行出一个动态的。 我一直在使用它没有经验。



文章来源: making proprietary ELF binaries portable on Linux