Я могу запустить Windows .exe файл на Linux? [дубликат]

Связанный вопрос:
Почему не будет работа exe's окон над Linux?

Может Windows .exe файл быть выполненным на Linux?

Если та же архитектура будет использоваться, то это будет возможно? Как то, если обе программы, на которых работают архитектура X86, будут он быть возможным запустить Windows .exe на Linux?

12
задан 20.11.2017, 22:10

7 ответов

EXE-файл или выполнится в соответствии с Linux или Windows, но не обоими.

Выполняется в соответствии с Windows

Если файл будет файлом окон, то он не будет работать в соответствии с Linux на своем собственном. Так, если это так, Вы могли попытаться выполнить его под слоем совместимости Windows (Вино). Если это не будет совместимо с вином, то Вы не сможете выполнить его в соответствии с Linux.

Прежде чем можно будет запустить, необходимо будет установить Вино. Шаги необходимо установить Вино, будут меняться в зависимости от платформы Linux, Вы идете. Вы можете, вероятно, Google "Ubuntu install wine", например, при установке Ubuntu.

После того как Вам установили вино, затем Вы смогли бы выполнить эти команды.

wine xxx.exe

Выполнитесь в соответствии с Linux

Если Вы будете знать, что этот файл работает в соответствии с Linux, то Вы захотите выполнить эти команды:

Вы захотите изменить полномочия позволить всем пользователям выполнять этот файл (a+x). Вы могли также позволить просто пользователю выполняться (u+x)

chmod a+x xxx.exe

Запустите программу, ./ говорит командной строке смотреть в текущем пути для файла для выполнения (если 'текущий' каталог не находится в переменной среды $PATH.

./xxx.exe
13
ответ дан 07.12.2019, 11:46

Нет, различные Операционные системы используют различные форматы (т.е. Windows использует PE, в то время как Linux использует ELF). Кроме того, при компиляции программа выполняет вызовы к собственным методам ОС. Как упомянуто, можно изучить использование ВИНА. Это обеспечивает большую часть функциональности для запуска Windows binries на Linux.

8
ответ дан 07.12.2019, 11:46

Операционная система (Windows или Linux) предоставляет услуги приложениям. Например, Windows и Linux будут иметь функции, которые приложение может вызвать в файлы доступа, чтобы получить доступ к сети, отобразить вещи на экране, и т.д.

Различные операционные системы обеспечивают различные способы сделать те вещи, таким образом, приложение, которое делает это Windows путь, не будет работать над Linux, и наоборот, даже при том, что архитектура ЦП является тем же.

11
ответ дан 07.12.2019, 11:46

Это - возможное вино поиска

1
ответ дан 07.12.2019, 11:46

Существует три основных причины, почему .exe файлы не будут непосредственно работать на Linux и почему исполняемый файл Linux не будет непосредственно работать на Windows.

  1. Первыми являются Системные вызовы. Системные вызовы являются, почти по определению, конкретной платформой. Однако не все системные вызовы сделаны тем же. Существуют портативные системные вызовы (например, определены библиотекой стандарта C/C++) и непортативные системные вызовы (например, определенный POSIX или Microsoft). Приложения, которые статически связаны во время компиляции с системными библиотеками, нашли бы, что часть кода, который статически включен, вероятно, не имела бы никакого шанса выполнения правильно в целевой платформе из-за весьма другого дизайна платформы. Приложения, которые динамично связаны во времени выполнения, действительно имеют шанс выполнения с некоторыми, обусловьте: если это - портативные системные вызовы, существует таблица преобразования между системными вызовами исходных двоичных файлов системных вызовов целевой платформы; если это - непортативный системный вызов, должен быть слой совместимости, которые получают системные вызовы исходной платформы и находят эквивалентный перевод в целевой платформе (который не может всегда быть possible1, различные платформы имеют другой набор функций, и некоторая функция не имеет смысла в другом platform2).

    Решение: Для выполнения Windows-программы в Linux Вино обеспечивает реализацию Windows System Calls и Windows System Libraries, это также распознает формат PE; Вино может выполнить Windows-программу в Linux без перекомпиляции. Для программы Linux в Windows Cygwin обеспечивает реализацию Системных вызовов POSIX в Windows, и это позволяет программу, записанную, чтобы Linux был перекомпилирован с помощью Cygwin GCC для работы системы Windows без изменений исходного кода. Из-за природы с открытым исходным кодом большей части программы Linux легче перекомпилировать вместо того, чтобы идти путем Вина обеспечить совместимый с двоичным файлом слой. Не невозможно обеспечить подобный вину слой совместимости, однако путь Cygwin более устойчив и существует только не много диска позволить программе Linux нес открытым исходным кодом быть легко портированной к Windows.

  2. Другой Формат исполняемых файлов. Windows использует PE (Портативный Исполняемый файл), формат и Linux используют ELF (Исполняемый и Связываемый Формат). Формат исполняемых файлов содержит метаданные и определяет, как исполняемый файл должен быть загружен и выполнен платформой.

    Решение: совершенно возможно записать PE-> ELF или ELF-> преобразователь PE; и, вероятно, не должно быть слишком трудно сделать так (предупреждение: я не знаком с фактическим форматом ни один одного). Иначе должен записать исполняемый загрузчик, который может понять файлы PE (например, Вино обеспечивает один), или исполняемый загрузчик, который может понять файл ELF (я полагаю, что дизайн Windows ограничивает возможность двойного активируемого по щелчку файла, работающего исходно как исполняемый файл),

  3. Соглашение о вызовах системных вызовов. Linux и Windows не только имеют другой набор доступных системных вызовов, он также имеет совсем другое соглашение о вызовах системного вызова. В Linux для создания системного вызова Вы передаете syscall число в регистре eax/rax и аргументы в остальной части регистров, и затем Вы делаете 0x80 запрос на прерывание. В DOS Вы также передаете аргументы в регистре, однако существует другое число запроса на прерывание для каждой системной службы, таким образом, Вы не передаете число системного вызова в eax/rax. Windows NT более подобен Linux, однако вместо 0x80, Вы повышаете 0x2E запрос на прерывание, однако число системного вызова все еще отличается (таким образом, Вам нужны syscall таблица преобразования номеров и возможно слой совместимости).

    Решение: Даже когда у Вас нет кода самоизменения или попытки выполнить данные как код или сделать другие хитрые коды, все еще очень трудно (как трудно как решение Проблемы остановки) проанализировать исполняемый файл, искать все запросы на прерывание системных вызовов и перевести их в системные вызовы целевой платформы. Более легкий путь состоит в том, чтобы предоставить услугу среды выполнения, которые обрабатывают запросы прерываний программы и перенаправляют их к системе целевой платформы calls3.

Существуют различные другие причины, но я полагаю, что эти три являются большими камнями преткновения.

1 безопасность файловой системы приходит на ум, нет никакого способа перевести между битами защиты Linux и NTFS Windows ACL.

2 Windows не могут разветвить процесс; CreateProcess может несколько использоваться для эмуляции ветвления однако, он теряет семантическую копию на записи. Нет никакого способа сделать создать копию на процессе записи в Windows.

3 я полагаю, что Вино делает это

5
ответ дан 07.12.2019, 11:46

Только если это - .NET .exe файл. Я сделал приложение в VS и скомпилировал в соответствии с Windows затем, я выполняю его на Linux

mono myapp.exe

Я знаю, что это не точно, что Вы ищете, все же ответ - Вы, может выполнить некоторые EXE-файлы на Linux.

1
ответ дан 07.12.2019, 11:46

Единственный способ выполнить исполняемые файлы на Победе, Linux (или даже Mac) имеет некоторый "виртуальный слой" между блоком и директивами ОС, опцией luka выполнения, это под Моно - один способ пойти, точно так же, как создание файла Java (или даже Adobe Air).

Создание двоичных файлов, которые выполняют это, как, для работы нескольких архитектуры, не возможно, потому что машинный код высоко связывается с ОС и даже аппаратными средствами, Вам, вероятно, придется выполнить несколько сборок для каждой системы/ОС.

1
ответ дан 07.12.2019, 11:46

Теги

Похожие вопросы