COFF в Linux или ELF в Windows
можно ли запускать исполняемые файлы COFF в UNIX или исполняемые файлы ELF в Windows? И каковы будут шаги, чтобы иметь возможность запускать любой тип файла в Windows и UNIX. Мне просто любопытно.
4 ответов
чтобы фактически запускать исполняемые файлы и заставлять их делать полезные вещи, вам нужно беспокоиться об API, а не только о формате исполняемого файла. На машине Linux с установленным WINE можно запустить Windows .EXE-файлы из командной строки, и они делают то же самое, что и в Windows.
другой путь на самом деле не представляется возможным, однако если вы установите CYGWIN на машине Windows, а затем перестроить приложение из исходного кода с помощью компиляторов CYGWIN, вы получите исполняемый файл, который работает в Windows и делает то же самое, что и исполняемый файл Linux в Linux. Многие стандартные инструменты Linux уже портированы и находятся в репозитории CYGWIN, включая X-Windows и GIMP.
http://lbw.sourceforge.net/ работает лучше, чем линия. Лоу был еще одним проектом для того, чтобы делать то же самое, но это было менее эффективно.
EDIT:http://atratus.org/ кажется, что делает то же самое, без необходимости иметь Interix/SFU.
чтобы правильно ответить на ваш вопрос, важно рассмотреть, что такое ELF, COFF и PE. Эти двоичные форматы по существу просто контейнеры, которые дают указания операционной системе о том, как выполнить инструкции raw CPU, содержащиеся в файле. Они очень похожи на аудио / видео контейнеры, такие как MKV, WMV и OGG. Поддержка исполняемого формата находится либо в операционной системе, либо нет. Microsoft Windows последовательно не оказывает никакой поддержки COFF или ELF, пока недавно. С Windows 10 Microsoft оказала косвенную поддержку ELF, встроив в системные подпрограммы, совместимые с Windows kernel UserMode-Linux. Ядро UserMode Linux работает поверх ядра Windows и запускает все двоичные форматы ELF почти так, как если бы оно работало независимо от MS Windows.
альтернатива использованию UserMode-Linux (sub-kernel) для Microsoft переписать большинство API Linux в полностью совместимом формате, их выбор решает один другая проблема совместимости:API-интерфейс. "A" означает Приложение, А" I " - интерфейс, однако API как интерфейс-это в основном набор исполняемых подпрограмм и предположений среды. Доступ к файловой системе и большинству основных системных подпрограмм обеспечивается ядром Windows, а все остальное-ядром UserMode Linux. Таким образом, Windows может не только запускать исполняемые файлы в формате ELF, но и запускать самые популярные исполняемые файлы ELF, которые уже сделаны для запуска на Linux API.
обратная, другая половина вопроса, запуск PE (большинство исполняемых файлов Microsoft Windows) в Linux также возможен. Существует две библиотеки обертывания среды выполнения, которые могут запускать MSIL (приложение виртуальной машины) и Win32 (обычное приложение ЦП). Поскольку ядро Linux расширяемо для распознавания определенного формата байтов, а затем запускает соответствующую программу-оболочку, ядро поддерживает PE и потенциально более исполняемые форматы контейнеров. Поэтому Linux может запускать некоторые PE-программы либо в mono runtime (приложения .NET/C#), либо в Wine runtime (Win32 C / C++).
чтобы установить среду UserMode-Linux, вы можете следовать инструкциям, приведенным на сеть разработки Microsoft. Подводя итог:
- включить Режим разработчика: Настройки / Обновление и безопасность / для разработчиков / Проверьте переключатель Режим разработчика
- в меню "Пуск" откройте " включить функции Windows on или off"
- прокрутите вниз и проверьте функцию" Подсистема Windows для Linux (бета-версия)"
- нажмите " ОК " и перезагрузитесь (необходимый шаг)
- после перезагрузки откройте Командную строку PowerShell / и запустите "Bash" и следуйте простым подсказкам, чтобы принять лицензию Canonical и начать загрузку образа Ubuntu
- после завершения загрузки вы сможете запустить "Bash on Ubuntu on Windows" из меню "Пуск"
будьте в курсе этот метод работает только в Windows 10 и по-прежнему ограничен текстовой консолью и портом Win32 Xorg, таким как vcXsrv, для чего-либо графического. Системы Cygwin или MSYS2 не могут запускать двоичные файлы ELF, но позволяют переносить и запускать те же приложения, которые обычно являются двоичными файлами ELF в системе Linux.
COFF был первоначально представлен UNIX (вокруг System V или около того), Поэтому да, некоторые UNIX, вероятно, все еще поддерживают формат COFF. Это было устарело Linux, по крайней мере, на некоторое время, и, по-видимому, большинство других Unices также устарели или полностью отказались от поддержки.
поддержка Windows ELF немного более сомнительна - почти наверняка не существует без какой-то глубокой хитрости. Вы должны быть более конкретными о том, что вы пытаетесь сделать здесь...