Возможно ли запустить исполняемые файлы COFF в UNIX или исполняемые файлы ELF в Windows? И каковы были бы шаги для запуска любого типа файла в Windows и UNIX. Мне просто интересно.
COFF для Linux или ELF для Windows
Ответ 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 немного сложнее - почти наверняка не существует без какой-либо глубокой хитрости. Вы должны быть более конкретными о том, что вы пытаетесь сделать здесь...