2009-12-12 18 views
11

¿Es posible ejecutar los archivos ejecutables COFF en UNIX o los archivos ejecutables ELF en Windows? Y cuáles serían los pasos para poder ejecutar cualquier tipo de archivo en Windows y UNIX. Tengo curiosidad.COFF en Linux o ELF en Windows

+0

[Subsistema para la descripción general de aplicaciones basadas en UNIX] (http://technet.microsoft.com/en-us/library/cc771672.aspx#BKMK_PortAppsSUA) [http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX] (http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX) – abmv

+0

SFA/SUA solo ejecuta ejecutables PE compilados para NT. – ephemient

Respuesta

7

Para ejecutar realmente archivos ejecutables y hacer que hagan cosas útiles, debe preocuparse por la API, no solo por el formato de archivo ejecutable. En una máquina Linux con WINE instalado, puede ejecutar archivos .EXE de Windows desde la línea de comandos y hacen lo mismo que hacen en Windows.

Sin embargo, al revés no es posible, pero si instala CYGWIN en una máquina Windows y luego reconstruye la aplicación desde el origen con los compiladores CYGWIN, obtendrá un ejecutable que se ejecuta en Windows y hace lo mismo que El ejecutable Linux funciona en Linux. Muchas de las herramientas estándar de Linux ya están portadas y en el repositorio de CYGWIN, incluidas cosas como X-Windows y GIMP.

+0

Como comenté en otra respuesta, http://sf.net/projects/line/ intentó ser el inverso de WINE, ejecutando binarios de Linux sin modificar en Windows. El proyecto ha sido abandonado durante años, pero definitivamente muestra que el concepto es posible. Si recuerdo correctamente, podría ejecutar algunos programas de consola vinculados estáticamente, y el IPC estaba en proceso. – ephemient

1

COFF fue presentado originalmente por UNIX (alrededor del Sistema V aproximadamente) así que sí, algunos UNIX probablemente aún es compatible con el formato COFF. Ha sido depreciado por Linux al menos por un tiempo, y presumiblemente la mayoría de las otras Unidades también han quedado en desuso o han dejado de recibir soporte.

El soporte de Windows ELF es un poco más dudoso, casi con certeza no está ahí sin algunos trucos profundos. Debería ser más específico sobre lo que está tratando de hacer aquí ...

+1

http://sf.net/projects/line/ logró cargar ejecutables ELF en Windows, ese puede ser un buen punto de partida para alguien motivado. – ephemient

2

Para responder correctamente a su pregunta, es relevante revisar qué son ELF, COFF y PE. Estos formatos binarios son esencialmente solo contenedores que dan instrucciones al sistema operativo sobre cómo ejecutar las instrucciones en bruto de la CPU contenidas en el archivo. Se parecen mucho a los contenedores de audio/video como MKV, WMV y OGG. El soporte para el formato ejecutable se encuentra en el sistema operativo o no. Microsoft Windows no ha dado ningún soporte para COFF o ELF, hasta hace poco. Con Windows 10, Microsoft ha brindado soporte indirecto para ELF mediante el desarrollo de las rutinas del sistema compatibles con el kernel de Windows UserMode-Linux. Un kernel de UserMode Linux se ejecuta sobre el núcleo de Windows y ejecuta todos los formatos binarios ELF casi como si se ejecutara independientemente de MS Windows.

La alternativa al uso del modo usuario en Linux (sub-núcleo) siendo por Microsoft para volver a escribir la mayor parte de la API de Linux en un formato totalmente compatible, su elección resuelve otro problema de compatibilidad: El API. "A" significa Aplicación e "I" para Interfaz, sin embargo, la API como interfaz es principalmente un conjunto de rutinas ejecutables y suposiciones de entorno. El kernel de Windows proporciona acceso al sistema de archivos y a la mayoría de las rutinas básicas del sistema, mientras que todo lo demás se proporciona en el kernel UserMode Linux. De esta manera, Windows no solo puede ejecutar ejecutables con formato ELF, sino que también puede ejecutar los ejecutables ELF más populares que ya están diseñados para ejecutarse en la API de Linux.

Lo contrario, la otra mitad de la pregunta, ejecutar PE (la mayoría de los ejecutables de Microsoft Windows) en Linux también es posible. Hay dos bibliotecas de envoltura de tiempo de ejecución que pueden ejecutar MSIL (aplicación de máquina virtual) y Win32 (aplicación de CPU normal). Debido a que el kernel de Linux es extensible para reconocer un determinado formato de bytes, entonces ejecute un programa contenedor apropiado, de hecho, el kernel admite PE y potencialmente más formatos de contenedores ejecutables. Por lo tanto, Linux puede ejecutar algunos programas PE ya sea en el tiempo de ejecución mono (aplicaciones .NET/C#) o en el tiempo de ejecución WINE (Win32 C/C++).

Para instalar el entorno UserMode-Linux puede seguir las instrucciones proporcionadas en Microsoft's Development Network. Para resumir:

  1. Activar el modo de desarrollador: Configuración | Actualización & Seguridad | Para Desarrolladores | Compruebe el botón de selección del modo desarrollador
  2. Desde el menú de inicio, abra “Activar las características de Windows o desactivar”
  3. de desplazamiento hacia abajo y comprobar el “Subsistema de Windows para Linux (Beta)” característica
  4. Hit bien y reinicio (requiere paso)
  5. una vez reiniciado, abra un símbolo PowerShell/comandos y ejecutar “Bash” y siga las instrucciones simples para aceptar la licencia de Canonical y inicio a la descarga de la imagen de Ubuntu
  6. Después de la descarga se ha completado, podrás capaz de iniciar "Bash en Ubuntu en Windows" desde el menú de Inicio

Tenga en cuenta que este método solo funciona en Windows 10 y aún está limitado a la consola de modo de texto y un puerto Win32 de Xorg como vcXsrv para cualquier cosa gráfica. Los sistemas Cygwin o MSYS2 no pueden ejecutar binarios ELF, pero hacen posible portar y ejecutar las mismas aplicaciones que normalmente son binarios ELF en un sistema Linux.

+0

Debería haber respondido la otra mitad de la pregunta. Existen diversos medios para ejecutar PE (ejecutables de Windows) en Linux, ya que el kernel de Linux es extensible para reconocer un cierto formato de bytes, luego ejecuta un programa contenedor adecuado. Por lo tanto, Linux puede ejecutar algunos programas PE ya sea en el tiempo de ejecución mono (aplicaciones .NET/C#) o en el tiempo de ejecución WINE (Win32 C/C++). –