【问题标题】:Create hybrid ELF and Mach-O binary创建混合 ELF 和 Mach-O 二进制文件
【发布时间】:2019-04-06 13:42:36
【问题描述】:

假设我有一个为 Linux (foo.elf) 和 OSX (foo.macho) 构建的程序。我想以一种让用户不必担心的方式分发它。

有没有办法创建一个文件foo,它在Linux 上的工作方式与foo.elf 和在OSX 上的foo.macho 类似,也许可以使用一些巧妙的技巧使文件与这两种格式兼容?

【问题讨论】:

  • 这两种文件格式从根本上是不兼容的,所以如果你真的只想分发一个文件,我看到的唯一方法是将两个二进制文件嵌入到自定义存根加载器中,该加载器用可以运行的东西编写单独在两个系统上,例如bash 或 Java。此外,您可能仍然需要在运行时将嵌入的二进制文件删除并写入临时文件,以便实际执行它们。

标签: cross-platform elf mach-o


【解决方案1】:

不,不可能有一个同时被识别为 ELF 和 MACH-O 文件的二进制文件;这个计划已经在前四个字节中分解了:

  • ELF 想要.ELF,而
  • MACH-O 需要 0xFEEDFACE0xFEEDFACF(取决于位宽)。

假设系统实际检查魔术字节,则无法创建既是 ELF 文件又是 MACH-O 文件的文件。

【讨论】:

  • “不可能有一个同时被识别为 ELF 和 MACH-O 的二进制文件”——这是真的,但这不是 OP 所要求的。
【解决方案2】:

有没有办法创建一个文件 foo,它的工作方式类似于 Linux 上的 foo.elf 和 OSX 上的 foo.macho

是的,有:shell archive

实际上,您创建了一个小型 shell 程序,它决定是运行 foo.elf 还是 foo.macho,然后在将其解压缩到临时目录后调用该程序。两个本机可执行文件都可以存储在例如压缩的 zip 文件,因此可以最大限度地减少运送未使用的二进制文件的开销。

也许使用一些巧妙的技巧使文件兼容这两种格式?

这是不可能(正如 Joachim Breitner 正确解释的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多