Je suis nouveau dans la programmation .NET C #. Je suis quelques livres. On dit qu'au lieu de le compiler directement en code binaire (code natif). Le code de haut niveau est converti en langage intermédiaire (appelé MSIL aka CIL). Mais quand je compile, j'obtiens un fichier exe / dll.
- Ce MSIL / CIL est-il contenu dans ces fichiers exe / dll?
- Je veux voir ce code de langue intermédiaire. Juste pour avoir une idée de son existence. Comment le visualiser?
- Ils appellent ce fichier exe / dll un
assembly
. Utilisent-ils ce "mot de fantaisie" juste pour les différencier des fichiers exe / dll qui contiennent du code binaire (code natif)?
c#
.net
assemblies
starblue
la source
la source
Réponses:
.text
section du fichier PE (exécutable portable = * .exe ou * .dll). Plus d'informations peuvent être trouvées ici .Si je peux recommander un bon livre sur ce sujet aussi, c'est Expert .NET 2.0 IL Assembler de Serge Lidin. C'est lui qui a conçu MSIL.
la source
.text
sextion? Sinon, que.text
contient-il? et ce qui se passe avec les#
sections que je pensais sont nommées en commençant par.
. Alors ça ne devrait pas être.strings
L'une de mes façons préférées de voir IL pour un extrait de C # est d'utiliser l' outil gratuit LINQPad . Après avoir entré du code et choisi "Instructions C #" en haut (ou "Programme C #", selon ce qui convient), cliquez sur le bouton "IL" sous la zone de saisie du code, et vous verrez l'IL généré.
Utiliser LINQPad pour cela est beaucoup plus pratique que de charger Visual Studio ou d'exécuter le compilateur à partir de la ligne de commande, puis de charger ILDASM et d'ouvrir le fichier .il avec un éditeur de texte.
la source
Si vous le souhaitez en ligne, .NET Fiddle est excellent. Collez simplement votre code et cliquez sur l'
View IL
option en haut à droite.la source
Une autre option: utiliser ReSharper
Vue synchronisée Source / IL: la ligne d'arrière-plan bleue gauche correspond au bloc IL droit
Dans Visual Studio:
Prend en charge la vue synchronisée du code source et de l'IL - lorsque vous cliquez sur une instruction dans la source, le bloc correspondant dans l'IL est mis en surbrillance (et vice versa). Affiche des descriptions pour IL de Microsoft Developer Network et «jeu d'instructions Common Intermediate Language (CIL)» de la spécification standard ECMA.
voir Affichage du langage intermédiaire (IL) dans l'aide de Resharper. L'image ci-dessus provient de l'aide de Resharper.
L'option gratuite consiste à utiliser Jetbrains dotPeek
voir aussi: "Exploring Intermediate Language (IL) avec ReSharper et dotPeek", par Maarten Balliauw, 19 janvier 2017 - Jetbrains Blog
la source
PS Comme vous suivez certains livres, je vous recommande fortement CLR via C # .
la source
Je crois qu'ils sont appelés «assemblages» car un assemblage est un ensemble de modules, assemblés par un manifeste.
(source: microsoft.com )
Voir le contenu de l'assemblage pour plus de détails.
la source
sharplab est un outil en ligne, idéal pour les cas d'utilisation simples. Tapez votre code sur la gauche, IL apparaît sur la droite.
la source
À bien des égards, les assemblys .NET sont similaires aux packages de bytecode Java.
la source
Je viens de passer quelques heures à rechercher le meilleur outil qui pourrait me permettre d'afficher le code IL directement dans Visual Studio.
La seule solution que j'ai trouvée jusqu'à présent est Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
ça marche plutôt bien!
Sinon, la deuxième meilleure solution, mais sans intégration de studio visuel, est JetBrains dotPeek, ce qui est assez génial pour être honnête.
la source
Je sais que c'est une vieille question et je préférerais l'un des outils ci-dessus. Cependant, à la rigueur, il existe une visionneuse MSIL dans la boîte avec Visual Studio depuis au moins la version 2005.
L'outil est nommé
ildasm.exe
et se trouve dans les dossiers suivants après les installations par défaut de Visual Studio:Visual Studio 2005 "
C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe"
Visual Studio 2008 "
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm.exe
"Visual Studio 2010 "
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\ildasm.exe
"Pour plus d'informations, consultez: « Comment: afficher le contenu de l'assembly» dans la bibliothèque MSDN.
la source
D'après mon expérience, la meilleure source de connaissances liées à l'IL est Andrew Troelsen «Pro C # and .NET Platform». À partir de la 3e édition, il a un chapitre vraiment, vraiment exceptionnel (environ 50 pages) sur la façon de comprendre IL et même d'écrire votre propre code et d'utiliser ILAsm. J'ai utilisé ces informations pour déterminer si l'héritage multiple existe dans le monde .NET. Vous pouvez également essayer d'utiliser des fonctionnalités très intéressantes en IL (par exemple le filtrage des exceptions qui n'existe qu'en VB mais pas en C #).
Je recommande vivement de lire ce chapitre.
Finalement, .NET Reflector est une norme d'entreprise pour enquêter sur le code IL des assemblys et le livre de Richter est définitivement "à lire". Mais à partir d'autres livres comme mentionnés ci-dessus, vous pourriez révéler des choses vraiment utiles :)
Oui, chaque assembly dans le monde .NET contient du code IL (avec le site avec le manifeste) qui peut être affiché via Reflector ou ILDasm. Encore plus, Reflector pourrait vous montrer du code optimisé C # et VB. Cela signifie que n'importe qui peut voir le code source d'un assemblage et c'est pourquoi, dans les produits commerciaux, des obfuscators sont utilisés.
la source
Si vous souhaitez afficher la langue intermédiaire, essayez de télécharger JustDecompile depuis Telerik (qui est actuellement gratuit, nécessite une inscription cependant).
Faites glisser votre DLL et choisissez
IL
dans la liste déroulante en haut!la source
Il y a maintenant une autre option. Vous pouvez le faire dans VS Code avec cette extension construite avec Roslyn. Ceci est actuellement limité à .NET Core .
la source