Ich bin neu in der .NET C # -Programmierung. Ich folge ein paar Büchern. Es wird gesagt, dass anstatt es direkt in Binärcode (Native Code) zu kompilieren. High-Level-Code wird in eine Zwischensprache konvertiert (MSIL aka CIL genannt). Aber wenn ich kompiliere, bekomme ich eine exe / Dll-Datei.
- Ist diese MSIL / CIL in dieser exe / dll-Datei enthalten?
- Ich möchte diesen Zwischensprachcode sehen. Nur um ein Gefühl für seine Existenz zu bekommen. Wie kann ich es anzeigen?
- Sie rufen diese exe / dll-Datei an
assembly
. Verwenden sie dieses "ausgefallene Wort" nur, um diese von den exe / dll-Dateien zu unterscheiden, die Binärcode (nativen Code) enthalten?
c#
.net
assemblies
Sternenblau
quelle
quelle
Antworten:
.text
Abschnitt der PE-Datei (portable ausführbare Datei = * .exe oder * .dll). Weitere Informationen finden Sie hier .Wenn ich auch in dieser Angelegenheit ein gutes Buch empfehlen darf, dann ist es Expert .NET 2.0 IL Assembler von Serge Lidin. Er ist der Typ, der MSIL entworfen hat.
quelle
.text
Sextion? Wenn nicht, was.text
enthält? und was ist los mit den#
Ich dachte, Abschnitte werden beginnend mit benannt.
. So sollte es nicht sein.strings
Eine meiner Lieblingsmethoden, um IL für einen Ausschnitt aus C # zu sehen, ist die Verwendung des kostenlosen LINQPad-Tools . Nachdem Sie einen Code eingegeben und oben "C # -Anweisungen" (oder "C # -Programm", je nachdem, was passt) ausgewählt haben, klicken Sie auf die Schaltfläche "IL" unter dem Codeeingabebereich. Die generierte IL wird angezeigt.
Die Verwendung von LINQPad ist wesentlich praktischer als das Laden von Visual Studio oder das Ausführen des Compilers über die Befehlszeile, das Laden von ILDASM und das Öffnen der .il-Datei mit einem Texteditor.
quelle
Wenn Sie es online möchten, ist .NET Fiddle ausgezeichnet. Fügen Sie einfach Ihren Code ein und klicken Sie
View IL
oben rechts auf die Option.quelle
Eine weitere Option: Verwenden Sie ReSharper
Quell- / IL-synchronisierte Ansicht: Die linke blaue Hintergrundlinie entspricht dem rechten IL-Block
In Visual Studio:
Unterstützt die synchronisierte Ansicht von Quellcode und IL - Wenn Sie auf eine Anweisung in der Quelle klicken, wird der entsprechende Block in IL hervorgehoben (und umgekehrt). Zeigt Beschreibungen für IL aus dem Microsoft Developer Network und den Befehlssatz "Common Intermediate Language (CIL)" aus der ECMA-Standardspezifikation an.
Siehe Anzeigen der Zwischensprache (Intermediate Language, IL) in der Resharper-Hilfe. Das Bild oben stammt aus der Resharper-Hilfe.
Die kostenlose Option ist die Verwendung von Jetbrains dotPeek
Siehe auch: "Exploring Intermediate Language (IL) mit ReSharper und dotPeek", von Maarten Balliauw, 19. Januar 2017 - Jetbrains Blog
quelle
PS Da Sie einigen Büchern folgen, kann ich Ihnen CLR über C # nur empfehlen .
quelle
Ich glaube , dass sie „Baugruppen“ , weil eine Baugruppe ist eine Reihe von Modulen, genannt werden montiert zusammen mit einem offensichtlichen.
(Quelle: microsoft.com )
Siehe Montage Inhalt für weitere Einzelheiten.
quelle
sharplab ist ein Online-Tool, das sich hervorragend für einfache Anwendungsfälle eignet . Geben Sie Ihren Code links ein, IL wird rechts angezeigt.
quelle
In vielerlei Hinsicht ähneln .NET-Assemblys Java-Bytecode-Paketen.
quelle
Ich habe gerade ein paar Stunden damit verbracht, nach dem besten Tool zu suchen, mit dem ich den IL-Code direkt in Visual Studio anzeigen kann.
Die einzige Lösung, die ich bisher gefunden habe, ist Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
es funktioniert ganz gut!
Ansonsten ist JetBrains dotPeek die zweitbeste Lösung, jedoch ohne visuelle Studio-Integration, was ehrlich gesagt ziemlich beeindruckend ist.
quelle
Ich weiß, dass dies eine alte Frage ist, und ich würde eines der oben genannten Tools bevorzugen. Zur Not gibt es jedoch seit mindestens Version 2005 einen MSIL-Viewer in der Box mit Visual Studio.
Das Tool hat den Namen
ildasm.exe
und befindet sich nach den Standardinstallationen von Visual Studio in den folgenden Ordnern: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
"Weitere Informationen finden Sie unter: " Gewusst wie: Anzeigen von Baugruppeninhalten " in der MSDN-Bibliothek.
quelle
Nach meiner Erfahrung ist Andrew Troelsen „Pro C # und .NET Platform“ die beste Quelle für IL-bezogenes Wissen. Ab der 3. Ausgabe hat er ein wirklich herausragendes Kapitel (ca. 50 Seiten) darüber, wie man IL versteht, sogar eigenen Code schreibt und ILAsm verwendet. Ich habe diese Informationen verwendet, um zu untersuchen, ob in der .NET-Welt Mehrfachvererbung vorhanden ist. Sie können auch versuchen, einige sehr interessante Funktionen in IL zu verwenden (z. B. das Filtern von Ausnahmen, die nur in VB, nicht jedoch in C # vorhanden sind).
Ich empfehle dringend, dieses Kapitel zu lesen.
Schließlich ist .NET Reflector ein Unternehmensstandard für die Untersuchung des IL-Codes von Baugruppen, und Richters Buch ist definitiv ein Muss. Aber aus anderen Büchern wie oben könnten Sie wirklich nützliche Dinge enthüllen :)
Ja, jede Assembly in der .NET-Welt enthält einen IL-Code (zusammen mit dem Manifest), der über Reflector oder ILDasm angezeigt werden kann. Darüber hinaus könnte Reflector Ihnen C # - und VB-optimierten Code anzeigen. Dies bedeutet, dass jede Person den Quellcode einer Baugruppe anzeigen kann. Deshalb werden in kommerziellen Produkten Verschleierer verwendet.
quelle
Wenn Sie die Zwischensprache anzeigen möchten, versuchen Sie, JustDecompile von Telerik herunterzuladen (was derzeit kostenlos ist, erfordert jedoch eine Anmeldung).
Ziehen Sie Ihre DLL und wählen Sie
IL
aus dem Dropdown-Feld oben!quelle
Es gibt jetzt eine andere Option. Sie können dies in VS Code mit dieser mit Roslyn erstellten Erweiterung tun . Dies ist derzeit auf .NET Core beschränkt .
quelle