Da diese IL-Codes, was ich mehr sehe, ich mag lernen, sie richtig zu interpretieren.Wie lerne ich IL auf der CLR
ich keine Dokumentation wie C# Compiler oder andere so denke ich, ich kann ziemlich viel kümmern uns um den Rest finden konnte, nachdem ich dieses gewöhnlichsten lernen:
Im Folgenden sind einige IL Beispielcodes enthält, was ich brauche zu wissen:
Probe 1:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 15 (0xf)
.maxstack 1
.locals init ([0] class EnumReflection.DerivedClass derivedClass)
IL_0000: nop
IL_0001: newobj instance void EnumReflection.DerivedClass::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: callvirt instance void EnumReflection.DerivedClass::WriteOutput()
IL_000d: nop
IL_000e: ret
} // end of method Program::Main
Probe 2:
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 38 (0x26)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldstr "Hello"
IL_0006: stfld string EnumReflection.DerivedClass::hello
IL_000b: ldarg.0
IL_000c: ldstr "World"
IL_0011: stfld string EnumReflection.DerivedClass::world
IL_0016: ldarg.0
IL_0017: ldc.i4.s 123
IL_0019: stfld int32 EnumReflection.DerivedClass::age
IL_001e: ldarg.0
IL_001f: call instance void EnumReflection.BaseClass::.ctor()
IL_0024: nop
IL_0025: ret
} // end of method DerivedClass::.ctor
Ich weiß, was diese Codes tun, seit ich sie produziert habe :-), aber ich würde gerne mehr über entsprechende IL-Code erfahren.
Diese Beispiele enthalten IL-Codes wie, und könnten Sie bitte Befehl mit Fragezeichen erklären? Und wofür stehen diese Befehle? So können wir sie uns leicht merken.
- nop (für Debugging - kein Betrieb)
- NEWOBJ (es scheint, es neues Objekt in Haufen schafft)
- stloc.0?
- ldloc.0?
- ret?
- ldarg.0?
- ldstr?
- stfld?
- ldc.i4.s?
- .ctor - Konstruktor
IL zu verstehen, ist wichtig, da es, wie bestimmte Compiler macht Codes und wirken in bestimmten Fällen erzeugt.
Allerdings konnte ich keine schöne Dokumentation finden, die auch Beispiele über IL enthält. CLR mit C# 3.0 ist ein gutes Buch, aber schließlich ist es kein IL-Buch, also erklärt es nicht alles über IL.
EDIT:
Ich habe die Spezifikationen gefunden und sie sagen diese: Dank @usr.
- nop (für Debugging - kein Betrieb)
- NEWOBJ - erstellen Sie ein neues Objekt
- stloc.0 - pop Wert von Stapel zu lokalen Variablen
- ldloc.0? - lokale Variable auf den Stack laden
- ret - von der Methode
- ldarg.0 zurückladen - Lade Argument 0 auf den Stack.
- ldstr - Ein Literal Zeichenfolge
- stfld laden - Laden in ein Feld eines Objekts
- ldc.i4.s - Push-num auf dem Stapel als int32, Kurzform.
- .ctor - Konstruktor
die engen Wähler zu lernen.. I edited meine Frage ... – Tarik
änderte ich den Titel, den ich. denke das ist eine absolut gültige Frage – usr
@usr: Danke für den Titelwechsel, es su Das sieht jetzt gut aus. – Tarik