2009-12-12 15 views
11

Est-il possible d'exécuter les fichiers exécutables COFF sous UNIX ou les fichiers exécutables ELF sous Windows? Et quelles seraient les étapes pour pouvoir exécuter un type de fichier sur Windows et UNIX. Je suis juste curieux.COFF sous Linux ou ELF sous Windows

+0

[Sous-système pour la présentation des applications UNIX] (http://technet.microsoft.com/fr-fr/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 exécute uniquement les exécutables PE compilés pour NT. – ephemient

Répondre

7

Pour réellement exécuter les exécutables et les faire faire des choses utiles, vous devez vous soucier de l'API, pas seulement le format de fichier exécutable. Sur une machine Linux avec WINE installé, vous pouvez exécuter des fichiers Windows .EXE à partir de la ligne de commande et ils font la même chose que sur Windows. L'inverse n'est pas vraiment possible, cependant si vous installez CYGWIN sur une machine Windows, puis reconstruisez l'application à partir de la source avec les compilateurs CYGWIN, vous obtiendrez un exécutable qui fonctionne sous Windows et fait la même chose que le L'exécutable Linux le fait sous Linux. Beaucoup d'outils Linux standard sont déjà portés et dans le référentiel CYGWIN, y compris des choses comme X-Windows et GIMP.

+0

Comme je l'ai commenté dans une autre réponse, http://sf.net/projects/line/ a tenté d'être l'inverse de WINE, en exécutant des binaires Linux non modifiés sous Windows. Le projet a été abandonné depuis des années, mais il montre clairement que le concept est possible. Si je me souviens bien, il pourrait exécuter quelques programmes de console statiquement liés, et IPC était en cours. – ephemient

1

COFF a été initialement introduit par UNIX (autour du System V ou à peu près) alors oui, certains UNIX supportent probablement encore le format COFF. Il a été déprécié par Linux au moins pendant un certain temps, et probablement la plupart des autres Unices ont également déprécié ou ont carrément abandonné le support.

Le support de Windows ELF est un peu plus incertain - presque certainement pas là sans une supercherie profonde. Vous devriez être plus précis sur ce que vous essayez de faire ici ...

+1

http://sf.net/projects/line/ a réussi à charger les exécutables ELF sous Windows - ce qui peut être un bon point de départ pour quelqu'un motivé. – ephemient

2

Pour répondre correctement à votre question, il est important de revoir ce que sont les ELF, COFF et PE. Ces formats binaires sont essentiellement des conteneurs qui indiquent au système d'exploitation comment exécuter les instructions CPU brutes contenues dans le fichier. Ils ressemblent beaucoup à des conteneurs audio/vidéo comme MKV, WMV et OGG. La prise en charge du format exécutable se trouve dans le système d'exploitation ou non. Microsoft Windows n'a toujours pas donné de support pour COFF ou ELF, jusqu'à récemment. Avec Windows 10, Microsoft a fourni un support indirect pour ELF en intégrant les routines système compatibles avec le noyau Windows UserMode-Linux. Un noyau Linux UserMode s'exécute au-dessus du noyau Windows et exécute tous les formats binaires ELF presque comme s'il fonctionnait indépendamment de MS Windows.

L'alternative à l'utilisation du UserMode-Linux (sous-noyau) étant pour Microsoft de réécrire la majorité de l'API Linux dans un format complètement compatible, leur choix permet de résoudre un autre problème de compatibilité: L'API. "A" signifie Application et "I" pour Interface, cependant l'API en tant qu'interface est principalement un ensemble de routines exécutables et d'hypothèses d'environnement. L'accès au système de fichiers et à la plupart des routines système de base est fourni par le noyau Windows, tandis que tout le reste est fourni dans le noyau Linux UserMode. De cette façon, Windows peut non seulement exécuter des fichiers exécutables au format ELF, mais aussi exécuter les exécutables ELF les plus populaires qui sont déjà exécutés sur l'API Linux.

L'inverse, l'autre moitié de la question, exécutant PE (la plupart des exécutables Microsoft Windows) sur Linux est également possible. Il existe deux bibliothèques d'enveloppement d'exécution qui peuvent exécuter MSIL (application de machine virtuelle) et Win32 (application d'UC normale). Parce que le noyau Linux est extensible pour reconnaître un certain format d'octets, alors exécutez un programme d'encapsuleur approprié, en effet le noyau supporte le PE et potentiellement plus de formats de conteneurs exécutables. Par conséquent, Linux peut exécuter certains programmes PE dans le runtime mono (applications .NET/C#) ou dans le runtime WINE (Win32 C/C++).

Pour installer l'environnement UserMode-Linux, vous pouvez suivre les instructions fournies sur Microsoft's Development Network. Pour résumer:

  1. Activer le mode développeur: paramètres | Mettre à jour & Sécurité | Pour les développeurs | Cochez le bouton radio Mode développeur
  2. Dans le menu Démarrer, ouvrez « Windows activer ou désactiver des fonctionnalités »
  3. Faites défiler la liste et vérifiez le « sous-système Windows pour Linux (Beta) » fonction
  4. Hit correct et reboot (obligatoire étape)
  5. une fois redémarré, ouvrez une invite PowerShell/de commande et exécutez « Bash » et suivez les simples instructions pour accepter la licence de Canonical et kick-off le téléchargement de l'image Ubuntu
  6. Après téléchargement terminé, vous serez capable de démarrer "Bash sur Ubuntu sous Windows" à partir du menu Démarrer
Sachez que cette méthode ne fonctionne que sur Windows 10 et est toujours limitée à la console en mode texte et à un port Win32 de Xorg comme vcXsrv pour tout ce qui est graphique.

Les systèmes Cygwin ou MSYS2 ne peuvent pas exécuter les binaires ELF, mais permettent de porter et d'exécuter les mêmes applications qui sont normalement des binaires ELF sur un système Linux.

+0

J'aurais dû répondre à l'autre moitié de la question. Il existe différents moyens d'exécuter PE (exécutable Windows) sous Linux, car le noyau Linux est extensible pour reconnaître un certain format d'octets, puis exécuter un programme d'encapsulation approprié. Par conséquent, Linux peut exécuter certains programmes PE dans le runtime mono (applications .NET/C#) ou dans le runtime WINE (Win32 C/C++). –