COFF в Linux или ELF в Windows

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


person PJT    schedule 12.12.2009    source источник
comment
SFA/SUA запускает только исполняемые файлы PE, скомпилированные для NT.   -  person ephemient    schedule 14.12.2009


Ответы (4)


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

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

person Michael Dillon    schedule 15.12.2009
comment
Как я прокомментировал в другом ответе, sf.net/projects/line пытался быть обратным WINE, запускающий немодифицированные бинарные файлы Linux в Windows. Проект был заброшен в течение многих лет, но он определенно показывает, что концепция возможна. Если я правильно помню, он мог запускать несколько статически связанных консольных программ, и IPC находился в разработке. - person ephemient; 16.12.2009

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

Альтернативой использованию UserMode-Linux (подядра) является переписывание 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 либо в среде моно (приложения .NET/C#), либо в среде выполнения WINE (Win32 C/C++).

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

  1. Включите режим разработчика: Настройки | Обновление и безопасность | Для разработчиков | Проверьте переключатель Режим разработчика
  2. В меню «Пуск» откройте «Включение или отключение компонентов Windows».
  3. Прокрутите вниз и проверьте функцию «Подсистема Windows для Linux (бета)».
  4. Нажмите «ОК» и перезагрузите компьютер (обязательный шаг)
  5. После перезагрузки откройте PowerShell/командную строку и запустите «Bash» и следуйте простым инструкциям, чтобы принять лицензию Canonical и начать загрузку образа Ubuntu.
  6. После завершения загрузки вы сможете запустить «Bash в Ubuntu в Windows» из меню «Пуск».

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

person Micah W    schedule 03.08.2016
comment
Я должен был ответить на вторую половину вопроса. Существуют различные способы запуска PE (исполняемого файла Windows) в Linux, поскольку ядро ​​Linux расширяется для распознавания определенного формата байтов, а затем для запуска соответствующей программы-оболочки. Таким образом, Linux может запускать некоторые программы PE либо в среде моно (приложения .NET/C#), либо в среде выполнения WINE (Win32 C/C++). - person Micah W; 21.12.2017

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

РЕДАКТИРОВАТЬ: http://atratus.org/, кажется, делает то же самое, без необходимости иметь Interix/SFU .

person sebbu    schedule 15.04.2011

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

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

person Steven Schlansker    schedule 12.12.2009
comment
sf.net/projects/line удалось загрузить исполняемые файлы ELF в Windows — это может быть хорошая отправная точка для кого-то мотивированного. - person ephemient; 14.12.2009