¿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
Respuesta
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.
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
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í ...
http://sf.net/projects/line/ logró cargar ejecutables ELF en Windows, ese puede ser un buen punto de partida para alguien motivado. – ephemient
http://lbw.sourceforge.net/ funciona mejor que la línea. bajo fue otro proyecto para hacer lo mismo, pero eso fue lo que menos funcionó.
EDIT: http://atratus.org/ parece hacer lo mismo, sin la necesidad de tener Interix/SFU.
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:
- Activar el modo de desarrollador: Configuración | Actualización & Seguridad | Para Desarrolladores | Compruebe el botón de selección del modo desarrollador
- Desde el menú de inicio, abra “Activar las características de Windows o desactivar”
- de desplazamiento hacia abajo y comprobar el “Subsistema de Windows para Linux (Beta)” característica
- Hit bien y reinicio (requiere paso)
- 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
- 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.
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++). –
- 1. Linux user-space ELF loader
- 2. Objetivo C en Windows o Linux
- 3. Detectar Windows o Linux en C, C++
- 4. Desarrollo de Android en Windows o Linux?
- 5. Determine si Linux o Windows en C++
- 6. arm-linux-gcc vs arm-elf-gcc
- 7. Linux Mach-O Desensamblador
- 8. en Java: determinar mediante programación direcciones de C/variables de C++ da un COFF/ELF/ejecutable ENANO
- 9. Resolución de símbolo de espacio de nombres de dos niveles de Mach-O en ELF/linux
- 10. cabecera ELF lectura en C
- 11. compilando en Windows y Linux
- 12. ¿Debo compilar de forma cruzada en Linux o Windows?
- 13. Ruby On Rails en Windows - Linux VM o arranque dual
- 14. Tabla de cadenas en ELF
- 15. Modifying elf file
- 16. Verificar permisos de escritura en Windows/Linux
- 17. ¿Desarrollando aplicaciones de Windows en Linux?
- 18. ¿Cómo puedo examinar el contenido de una sección de datos de un archivo ELF en Linux?
- 19. Temas/Comparación de procesos en Linux/Windows
- 20. Compilación cruzada en Windows y Linux
- 21. Depuración en Linux para Windows Desarrollador
- 22. alternativa malloc_size en Linux y Windows
- 23. DLL de Windows en Linux System
- 24. Building C++ en Windows y Linux
- 25. Símbolos reubicables en formato ELF (lenguaje ensamblador)
- 26. Diferencia entre 'java' y 'libjvm.so' (Linux) o 'jvm.dll' (Windows)?
- 27. Leer la entrada GOT en Elf Binary
- 28. Linux- Windows Timezone Mapping?
- 29. mkdir Windows vs Linux
- 30. Importar nombres en el binario ELF
[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
SFA/SUA solo ejecuta ejecutables PE compilados para NT. – ephemient