2009-03-15 14 views
15

Necesito convertir el código IL a C#. Tengo un ensamblaje y estoy leyendo este ensamblaje. Puedo obtener MethodBody de MethodInfo y la MethodBody tiene un método GetILAsByteArraY() que devuelve una matriz de bytes ahora quiero convertir este IL a código C#. Por favor, ayúdenme a resolver esto.Convirtiendo código IL a C#

+0

¡Decisión unánime! –

+1

¿Para qué necesita esto? Si describe su situación con más detalle, tal vez podamos sugerir más que .NET Reflector. –

+1

@ Anton Probablemente sería mejor que no entendiéramos este hackeo. –

Respuesta

20

No reinventar la rueda; use el .NET Reflector de Lutz Roeder.

+3

Ya no es Lutz '. – Will

+21

Creo que es obvio que está intentando crear otra rueda como la de .NET Reflector y quiere saber cómo está hecha. Lutz no debería ser necesariamente el único hombre en el mundo que sabe cómo hacerlo. –

+0

@HasanKhan dada la elección de respuesta de OP, está muy contento con Lutz siendo el único hombre :) – nawfal

1

Veamos si logro conseguirlo primero: .NET Reflector! Esto realmente debería ser una pregunta frecuente ...

1

¿No puedes hacer esto con Reflector?

Puede cargar un ensamblado y visualizarla como VB.net/C#/IL ...

0

No hay herramienta en el BCL que lo haga; sin embargo, existe una gran herramienta llamada Reflector, para la cual puede escribir sus propios complementos. Entonces podría usarlo de manera probal para obtener los datos que desea.

0

Reflector hace esto. Tal vez podrías usar Reflector contra Reflector y aprender cómo maneja el problema.

También podría decir por qué desea hacer esto: puede haber una mejor solución para su problema general.

+3

Los internos de los reflectores se ofuscaron al usar elementos no imprimibles (al menos Lutz lo hizo). Mientras que sí podría reflexionar sobre sí mismo, una mejor pregunta sería si realmente vale la pena que ... – JoshBerke

+0

Sí, eso es lo que sospechaba. Es por eso que le pregunté por qué quiere hacerlo. –

0

Voy a ser el primero en sugerir que agarrar una copia del reflector de Red Gate.

+0

Esto es como gritar * ¡PRIMERO! * Y equivocarse ... – cjk

+1

@ck Bueno, respondes una pregunta y después de presionar Enviar, otras cincuenta personas ya han respondido. O bien ... – Will

0

Tal vez deberías probar Dis # si no quieres reinventar la rueda ... Es casi la mejor herramienta para convertir el código NetDASM tiene una herramienta que te permite convertir C# a IL. tal vez deberías echarle un vistazo a eso.

9

reinventar la rueda sin duda una mejor manera de aprender! tendrás que crear tu propia clase que convierta iL en C#. Esto requiere el conocimiento del lenguaje intermedio.

que supone que ya ha convertido la matriz de bytes con las instrucciones IL igual que vemos en ildasm.exe, Usando Reflection.Emit.OpCodes, OpCode.OperandType, BitConvertor.ReadByte(), etc. BitConvertor.ReadInt32

3

Si desea hacerlo usted mismo, usted podría comenzar desde el viejo Cecil.Decompiler y mejorarlo, consulte the source code y an old post of Jb. Evain announcing the project (enlace abajo).

+0

Ambos enlaces están rotos. –

+0

Se arregló la primera, no se puede hacer nada con respecto a la segunda, ya que no sé por qué puso su blog fuera de línea incluso si todavía lo referencia en Twitter. –

1

Para los motores de búsqueda, el reflector no es libre de ningún modo. Pero una nueva herramienta FREE más reciente y mejor se ofrece desde telerik llamado JustDecompile. Acabo de descargar esto y es tan increíble y solo es beta. Aparentemente Telerik promete gratis para siempre.

15

El reflector Lutz Roeder se adquirió y ya no está disponible para su descarga gratuita.

Ahora hay una herramienta gratuita (una vez más) llamada ILSpy. He encontrado que es muy bueno, y no solo generará el código C# de IL sino que también creará un proyecto .csproj si descompila un ensamblado de DLL completo.

Cuestiones relacionadas