COFF для Linux или ELF для Windows

Возможно ли запустить исполняемые файлы COFF в UNIX или исполняемые файлы ELF в Windows? И каковы были бы шаги для запуска любого типа файла в Windows и UNIX. Мне просто интересно.

Ответ 1

Чтобы запустить исполняемые файлы и заставить их делать полезные вещи, вам нужно беспокоиться об API, а не только формате исполняемого файла. На машине Linux с установленным WINE вы можете запускать Windows.EXE файлы из командной строки, и они делают то же самое, что и в Windows.

Другой способ невозможен, однако, если вы устанавливаете CYGWIN на машину Windows и затем перестраиваете приложение из источника с помощью компиляторов CYGWIN, вы получите исполняемый файл, который работает в Windows, и делает то же самое, что и в Linux исполняемый файл на Linux. Многие стандартные инструменты Linux уже перенесены и в репозиторий CYGWIN включены такие вещи, как X-Windows и GIMP.

Ответ 2

http://lbw.sourceforge.net/ работает лучше, чем строка. Низкий был еще одним проектом для того, чтобы делать то же самое, но это было тем меньше.

EDIT: http://atratus.org/, похоже, делает то же самое, без необходимости иметь Interix/SFU.

Ответ 3

Чтобы правильно ответить на ваш вопрос, важно рассмотреть, что такое ELF, COFF и PE. Эти двоичные форматы являются, по сути, просто контейнерами, которые дают указания операционной системе о том, как выполнять необработанные инструкции процессора, содержащиеся в файле. Они очень похожи на аудио/видеоконтейнеры, такие как MKV, WMV и OGG. Поддержка исполняемого формата - либо в операционной системе, либо нет. До недавнего времени Microsoft Windows не поддерживала поддержку COFF или ELF. В Windows 10 Microsoft предоставила косвенную поддержку ELF, встроив в системные процедуры, совместимые с UserMode-Linux Windows. Ядро UserMode Linux работает поверх ядра Windows и запускает все бинарные форматы ELF почти так же, как если бы он работал независимо от MS Windows.

Альтернативой использованию UserMode-Linux (подъязыка) для Microsoft является переписывание большей части Linux API в полностью совместимом формате, их выбор решает еще одну проблему совместимости: API. "A" означает Application и "I" для интерфейса, однако API в качестве интерфейса - это всего лишь набор исполняемых подпрограмм и предположений среды. Доступ к файловой системе и большинству основных системных подпрограмм обеспечивается ядром Windows, а все остальное предоставляется в ядре UserMode Linux. Таким образом, не только Windows может запускать исполняемые файлы с форматированием ELF, но и может запускать самые популярные исполняемые файлы ELF, которые уже созданы для работы в API Linux.

Обратная, другая половина вопроса, выполняющая PE (большинство исполняемых файлов Microsoft Windows) на Linux, также возможна. Существуют две библиотеки обтекания среды выполнения, которые могут запускать MSIL (приложение виртуальной машины) и Win32 (обычное приложение ЦП). Поскольку ядро ​​Linux расширяется для распознавания определенного байтового формата, запустите соответствующую программу-оболочку, в сущности ядро ​​поддерживает PE и потенциально более исполняемые форматы контейнеров. Поэтому Linux может запускать некоторые PE-программы либо в среде исполнения (.NET/С#), либо в среде выполнения WINE (Win32 C/С++).

Чтобы установить среду UserMode-Linux, вы можете следовать инструкциям, приведенным в Microsoft Development Network. Подводя итог:

  • Включить режим разработчика: Настройки | Обновление и безопасность | Для разработчиков | Проверьте переключатель режима разработки
  • В меню "Пуск" откройте "Включить или отключить функции Windows"
  • Прокрутите вниз и проверьте функцию "Подсистема Windows для Linux (бета-версия)"
  • Хит в порядке и перезагрузка (требуется шаг)
  • После перезагрузки откройте командную строку PowerShell и запустите "Bash" и следуйте простым приглашениям принять лицензию Canonicals и начать загрузку образа Ubuntu.
  • После завершения загрузки вы сможете запустить "Bash в Ubuntu в Windows" в меню "Пуск"

Знайте, что этот метод работает только в Windows 10 и по-прежнему ограничен консолью текстового режима и портами Win32 Xorg, например vcXsrv, для любого графического интерфейса. Системы Cygwin или MSYS2 не могут запускать двоичные файлы ELF, но позволяют подключать и запускать те же приложения, которые обычно являются бинарниками ELF в системе Linux.

Ответ 4

COFF был первоначально представлен UNIX (около System V или около того), поэтому да, некоторые UNIX, вероятно, все еще поддерживают формат COFF. Это было устарело Linux по крайней мере на некоторое время, и, по-видимому, большинство других Unices также устарели или полностью потеряли поддержку.

Поддержка Windows ELF немного сложнее - почти наверняка не существует без какой-либо глубокой хитрости. Вы должны быть более конкретными о том, что вы пытаетесь сделать здесь...