Journal Un .exe sous Linux ?

Posté par  .
Étiquettes : aucune
0
12
mai
2004
Suite à une revue de Gnome 2.6, j'ai installé Muine, un logiciel musical pour Gnome.
C'est confectionné sous Mono. Première fois que je vois un truc en gtk-sharp.

Bon, c'est alors qu'un rapide ps me sort qqs lignes du type :
/usr/bin/mono /usr/share/dotnet/muine/muine.exe

Outre l'utilisation du nom dotnet, qui pourra faire l'objet d'attaques par la suite, l'extension .exe m'a surpris. Unixien de la première heure (hum), je ne me laisse pas impressionner par une extension.
Un petit file plus tard, je deviens encore plus perplexe :
$ file /usr/share/dotnet/muine/muine.exe
/usr/share/dotnet/muine/muine.exe: MS Windows PE 32-bit Intel 80386 console executable
$

La curiosité l'emportant, je vim le bidule, et là, horreur, qu'est-ce que je vois ?
« This program cannot be run in DOS mode. »

Je suis sur le cul. Mono, en fait c'est un bidule qui nous met des .exe ? C'est la fin du ELF ? Merci de bien vouloir m'expliquer.

PS : le meilleur pour la fin :
$ ls /usr/share/dotnet/muine/
AmazonSearchService.dll muine.exe
$
  • # Peut etre une piste...

    Posté par  (site web personnel) . Évalué à 6.

    Il me semble que .NET permet de creer des binaires avec le runtime necessaire collé dans le binaire, ou alors un bootstrap binaire pour lancer l'interpreteur/JIT .net... me souviens plus tres bien. En tout cas ca expliquerais pourquoi le tout est dans un PE-i386, y'aurait juste de quoi lancer le JIT sur une section .data avec tout le code IL (Intermediate Language iirc).
    • [^] # Re: Peut etre une piste...

      Posté par  . Évalué à 4.

      Heu... c'est intéressant, mais en Français ça donne quoi ? :)
      Un PE-i386, c'est quoi ? Un « conteneur » ? C'est un bidule qui enrobe le code lui-même, qui serait dans une section un peu plus loin ? Ils embarquent carrément l'interpréteur dans l'exécutable ?
      Ouiiiiiiiiin, j'ai rien capté :)
      • [^] # Re: Peut etre une piste...

        Posté par  (site web personnel) . Évalué à 5.

        Il dit que c'est peut-être comme un .exe auto-extractible que peuvent faire les trucs comme Winzip : ça contient à la fois l'exe de dezip et les données.

        Sous Linux, tu peux techniquement decompresser la partie donnée normalement.
      • [^] # Re: Peut etre une piste...

        Posté par  (site web personnel) . Évalué à 4.

        Un PE-i386, c'est quoi ? Un « conteneur » ?

        C'est un format de binaire reconnu par les OS win32, en tres gros, PE-i386 est l'equivalent des fichiers ELF sur Linux. Mais tu as bien raison de parler de conteneur, car apres tout un binaire n'est qu'une archive avec plusieurs section ayant chacune leur role (exe, data, ro data, bss etc...). C'est pourquoi je parlais de code IL dans une section .data, qui aurait été passé au JIT par un bout de code placé dans une section exe (une sorte de bootstrap).

        Sur un windows, le schema serait le suivant:
        1. Win32 charge la partie exe
        2. la partie exe charge une section .data ou se trouve le code IL
        3. il recherche la presence d'un JIT .net dans la base de registre (supposition)
        4. il passe le code IL au JIT et attend patiemment que le JIT lui rende la main.

        Un petit peu comme le shebang #!/bin/sh en debut d'un script Bourne Shell.
    • [^] # Re: Peut etre une piste...

      Posté par  (site web personnel) . Évalué à 9.

      >En tout cas ca expliquerais pourquoi le tout est dans un PE-i386, y'aurait juste de quoi lancer le JIT sur une section .data avec tout le code IL

      Comment peux-tu dire de telles choses ici !
      Il y a des enfants qui nous lisent, tu sais.
  • # Muine

    Posté par  (site web personnel) . Évalué à 2.

    Muine utilise Amazon comme base de données d'info et d'image http://muine.gooeylinux.org/faq.shtml(...)

    mauvais idée amha (légal ?) mais probablement très efficace...
  • # Compatibilite

    Posté par  . Évalué à 1.

    Ca ne serait pas, par hasard, pour assurer la compatibilite des binaires avec Windows ?

    Ca doit être portable tout ça quand même, si tu fais un binaire qui n'est pas un .exe, Windows aura du mal à le lancer...
    • [^] # Re: Compatibilite

      Posté par  (site web personnel) . Évalué à 2.

      Heu en quoi un executable windows est-il plus portable que de l'ELF ?
      • [^] # Re: Compatibilite

        Posté par  (site web personnel) . Évalué à 2.

        Ben je pense pas que la vm .net de microsoft sache lire un prog en IL dans un autre conteneur que exe, donc à ce niveau oui elf n'est pas portable pour ça. De plus je suppose que le format binaire des appli .net est défini dans les normes déposées à l'ecma, donc il n'ont peut-être pas eu le choix du type de conteneur.
        • [^] # Re: Compatibilite

          Posté par  (site web personnel) . Évalué à 3.

          Non non la machine virtuel .NET de Microsoft est parfaitement capable de lire un prog en IL depuis un autre conteneur, les .dll par exemple, qui sont identiques dans leur contenu aux .exe (dans le monde .NET), sans point d'entrée. Tu peux t'amuser à mettre l'extension que tu veux si celà te chante. Le fait de créer un exécutable .exe permet comme dit plus haut de charger le programme par le JIT sans que l'utilisateur est besoin de faire une commande du genre "mono monprog" sous Windows et ainsi l'utilisateur lambda ne voit pas la différence... Ils auraient aussi pu choisir une autre extension, mais là encore l'utilisateur lambda, faut pas lui changer ses habitudes... Mono compile effectivement un programme du même type que .NET par soucis de compatibilité, c'est tout.

          Evidemment sous nunux celà fait bizzare.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.