创建混合ELF和Mach-O二进制文件

时间:2019-04-06 13:42:36

标签: cross-platform elf mach-o

假设我有一个针对Linux(foo.elf)和OSX(foo.macho)构建的程序。我希望以某种方式分发它,以便用户不必担心它。

是否有一种方法可以创建文件foo,使其在Linux上像foo.elf并在OSX上像foo.macho一样工作,也许可以使用一些巧妙的技巧使文件与两种格式兼容? / p>

2 个答案:

答案 0 :(得分:1)

否,不可能有同时被识别为ELF和MACH-O文件的二进制文件。该计划已分解为前四个字节:

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

假设系统实际上检查了魔术字节,则无法创建同时为ELF和MACH-O文件的文件。

答案 1 :(得分:1)

  

是否有一种创建文件foo的方法,该文件的作用类似于Linux上的foo.elf和OSX上的foo.macho

是的,有:shell archive

有效地,您创建一个微型外壳程序,该程序决定运行foo.elf还是foo.macho,然后在将该程序提取到临时目录后调用该程序。两个本机可执行文件都可以存储在例如压缩的zip文件,因此可以最大程度地减少运输未使用的二进制文件的开销。

  

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

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