J'ai toujours été curieux de savoir comment une extension, EXE, peut être aussi polyvalente car si vous assemblez un programme d'assemblage, vous obtenez un EXE en code machine pour votre processeur mais si vous compilez un C# ou autre Programme .Net, vous obtenez également un EXE, sauf qu'il est exécuté dans l'environnement d'exécution approprié. Je ne suis pas sûr que ce soit différent de OS à OS (j'imagine que c'est), mais quand un EXE est exécuté, comment est-il déterminé comment l'exécuter? En parallèle, si j'écrivais mon propre langage de programmation, comment lierais-je mon environnement d'exécution à ce mécanisme?Comment les différents EXE s'exécutent-ils dans le bon environnement d'exécution?
0
A
Répondre
4
Lors de la compilation d'un programme .NET sur un EXE, il s'agit plus que d'un blob de bytecode (comme Java). Il y a en fait un exécutable natif créé qui va charger le runtime .NET et lui transférer le bytecode .NET, ou afficher un message d'erreur amical-ish indiquant que le framework n'est pas disponible.
Le format est encore plus flexible, car chaque EXE Windows contient un programme DOS qui affiche une erreur ("impossible à exécuter en mode DOS") lorsqu'il est exécuté en tant que programme DOS.
Vous pouvez lire plus de détails sur le format PE sur Wikipedia: http://en.wikipedia.org/wiki/Portable_Executable
Pour ajouter un détail à votre belle réponse: Au moins dans le cas du message d'erreur ('Impossible d'exécuter sous DOS mode.'), la Le programme DOS inclus dans le fichier exécutable était connu sous le nom de _stub_. – stakx