2008-09-23 14 views
7

Conozco las herramientas de Java para manipular, generar y descompilar el bytecode de JVM (ASM, cglib, jad, etc.). ¿Qué herramientas similares existen para el bytecode CLR? ¿La gente hace la manipulación del código de bytes para el CLR?¿Qué herramientas CLR/.NET bytecode existen?

Respuesta

2

Bytecode es un formato binario. Los ensamblados .NET funcionan bastante diferente en términos de cómo almacenan las instrucciones de ejecución.

En lugar de compilar una estructura tipo bytecode, los lenguajes .NET se compilan en un lenguaje intermedio (de hecho, se llama precisamente eso - IL).

Este es un lenguaje legible por humanos que se parece a una versión del ensamblador orientada a objetos.

Por lo tanto, en términos de examinar o manipular el IL para ensamblajes individuales, las herramientas como Reflector e ILDASM le permiten ver convenientemente el IL para cualquier ensamblaje.

La manipulación es un poco diferente, sugiero echar un vistazo a algunas de las herramientas de AOP en el espacio .NET. También sugiero echar un vistazo a Phoenix, que es un proyecto de compilación que MS tiene en proceso. Tiene algunas características de manipulación post-compilación realmente geniales.

Si quiere saber más acerca de las herramientas .NET AOP, le sugiero que abra otra pregunta (esa es otra lata de gusanos).

También hay varios libros que le enseñarán los pormenores de IL. No es un lenguaje muy complicado de aprender.

+8

"Los ensamblados NET funcionan bastante diferente en términos de cómo almacenan las instrucciones de ejecución" no, no ... todo finalmente se compila en un "formato binario" . Este formato binario tiene una correspondencia de 1 a 1 con IL. –

14

Reflector siempre es bueno, pero Mono.Cecil es la mejor herramienta que puede pedir en general. Es invaluable para manipular CIL de cualquier manera.

7

Mono.Cecil es una gran herramienta como ASM. Es un subproyecto de Mono, y fuente totalmente abierta. Incluso proporciona better feature que System.Reflection.

1

NDepend le permite hacer .NET ensamblajes de análisis estático (métricas de código, análisis de dependencia, etc.). NDepend es muy útil para obtener una visión general de la estructura de sus ensamblados .NET usando la matriz de dependencia, gráficos de dependencia y métricas treemap visualizations.

También está integrado con Reflector: por ejemplo, puede detectar los tipos y métodos importantes en sus ensamblajes utilizando respectivamente un Tipo/Método Rank metric (una métrica de código similar al Rango de página de Google) y salta directamente de NDepende a Reflector para obtener el código desensamblado en C#, VB.NET, etc.

Cuestiones relacionadas