Создать гибридный ELF и Mach-O бинарный - PullRequest
1 голос
/ 06 апреля 2019

Предположим, у меня есть программа, созданная для Linux (foo.elf) и для OSX (foo.macho).Я хотел бы распространять его так, чтобы пользователю не приходилось беспокоиться об этом.

Есть ли способ создать файл foo, который работает как foo.elf в Linux и * 1007?* на OSX, может быть, использовать некоторые хитрые приемы, чтобы сделать файл совместимым с обоими форматами?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Есть ли способ создать файл foo, который работает как foo.elf в Linux и foo.macho в OSX

Да, есть: архив оболочки .

По сути, вы создаете крошечную программу-оболочку, которая решает, запустить ли foo.elf или foo.macho, а затем вызывает эту программу после извлечения ее во временный каталог.Обе нативные исполняемые файлы могут храниться, например, в сжатом zip-файле, поэтому издержки на доставку неиспользуемого двоичного файла могут быть сведены к минимуму.

Может быть, с помощью некоторых хитрых приемов, чтобы сделать файл совместимым с обоими форматами?

Это невозможно (как правильно объяснил Иоахим Брейтнер).

1 голос
/ 07 апреля 2019

Нет, невозможно иметь двоичный файл, который распознается как файл ELF и файл MACH-O; этот план уже разбит на первые четыре байта:

  • эльф хочет .ELF, а
  • MACH-O хочет 0xFEEDFACE или 0xFEEDFACF (в зависимости от ширины бита).

Предполагая, что системы фактически проверяют магические байты, невозможно создать файл, который является одновременно файлом ELF и файлом MACH-O.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...