Dado que estos códigos IL lo que veo más, me gusta aprender a interpretarlos correctamente.Cómo aprender IL en el CLR
no pude encontrar una documentación como el compilador de C# o cualquier otro, así que creo que puedo tener más o menos el cuidado del resto después de aprender esto de las más comunes:
A continuación se presentan algunos códigos IL muestra que contienen lo que necesito a saber:
Muestra 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
Muestra 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
Sé lo que hacen estos códigos desde que los produje :-) Sin embargo, me gustaría obtener más información sobre el código IL correspondiente.
Estas muestras contienen códigos IL como, y ¿podría explicar el comando con signos de interrogación? y también, ¿qué significan esos comandos? Entonces podemos memorizarlos fácilmente.
- nop (para la depuración - ninguna operación)
- newobj (parece que está creando nuevo objeto en el montón)
- stloc.0?
- ldloc.0?
- ret?
- ldarg.0?
- ldstr?
- stfld?
- ldc.i4.s?
- .ctor - constructora
La comprensión de IL es importante ya que expone la forma en particular, compilador produce códigos y actuar en casos específicos.
Sin embargo, no pude encontrar buenos documentos que también contengan ejemplos sobre IL. CLR con C# 3.0 es un buen libro, pero finalmente no es un libro de IL, por lo que no explica todo sobre IL.
EDIT:
he encontrado las especificaciones y que diga que éstos: Gracias a @usr.
- nop (para la depuración - ninguna operación)
- newobj - crear un nuevo objeto
- stloc.0 - valor de chasquido de la pila a la variable local
- ldloc.0? - carga la variable local en la pila
- ret - devuelve del método
- ldarg.0 - Cargue el argumento 0 en la pila.
- ldstr - cargar una cadena literal
- stfld - tienda en un campo de un objeto
- ldc.i4.s - num empuje en la pila como int32, forma corta.
- .ctor - constructora
para el cierre del votante:.. he editado mi pregunta ... – Tarik
he cambiado el título I. Creo que esta es una pregunta perfectamente válida. – usr
@usr: Gracias por el cambio de título, es su Se ve bien ahora. – Tarik