Soy nuevo en la programación .NET C #. Estoy siguiendo algunos libros. Se dice que en lugar de compilarlo directamente en código binario (código nativo). El código de alto nivel se convierte en lenguaje intermedio (llamado MSIL, también conocido como CIL). Pero cuando compilo, obtengo un archivo exe / Dll.
- ¿Este MSIL / CIL está contenido en estos archivos exe / dll?
- Quiero ver ese código de idioma intermedio. Solo para sentir su existencia. ¿Cómo verlo?
- Están llamando a este archivo exe / dll un
assembly
. ¿Están usando esta "palabra elegante" solo para diferenciarlos de los archivos exe / dll que contienen código binario (código nativo)?
c#
.net
assemblies
starblue
fuente
fuente
Respuestas:
.text
sección del archivo PE (ejecutable portable = * .exe o * .dll). Más información se puede encontrar aquí .Si puedo recomendar un buen libro sobre ese tema también, es Expert .NET 2.0 IL Assembler de Serge Lidin. Es el tipo que diseñó MSIL.
fuente
.text
sexción? Si no, ¿qué.text
contiene? y qué pasa con las#
secciones que pensé que se nombran comenzando con.
. Así que no debería ser.strings
Una de mis formas favoritas de ver IL para un fragmento de C # es usar la herramienta gratuita LINQPad . Después de ingresar un código y elegir "declaraciones C #" en la parte superior (o "Programa C #", según corresponda), haga clic en el botón "IL" debajo del área de entrada del código y verá el IL generado.
Usar LINQPad para esto es mucho más conveniente que cargar Visual Studio o ejecutar el compilador desde la línea de comandos, luego cargar ILDASM y abrir el archivo .il con un editor de texto.
fuente
Si lo quieres en línea, .NET Fiddle es excelente. Simplemente pegue su código y haga clic
View IL
en la opción en la esquina superior derecha.fuente
Otra opción: usar ReSharper
Vista sincronizada de origen / IL: la línea de fondo azul izquierda corresponde con el bloque IL derecho
En Visual Studio:
Admite la vista sincronizada del código fuente y la IL: cuando hace clic en una instrucción en la fuente, se resalta el bloque correspondiente en IL (y viceversa). Muestra descripciones para IL de Microsoft Developer Network y "Conjunto de instrucciones de lenguaje intermedio común (CIL)" de la especificación estándar de ECMA.
vea Ver lenguaje intermedio (IL) en la Ayuda de Resharper. La imagen de arriba es de la Ayuda de Resharper.
La opción gratuita es usar Jetbrains dotPeek
ver también: "Explorando el lenguaje intermedio (IL) con ReSharper y dotPeek", por Maarten Balliauw, 19 de enero de 2017 - Jetbrains Blog
fuente
PD Como estás siguiendo algunos libros, te recomiendo CLR a través de C # .
fuente
Creo que se llaman "ensamblajes" porque un ensamblaje es un conjunto de módulos, ensamblados por un manifiesto.
(fuente: microsoft.com )
Vea el contenido del ensamblaje para más detalles.
fuente
Sharplab es una herramienta en línea, ideal para casos de uso simples. Escriba su código a la izquierda, IL aparece a la derecha.
fuente
En muchos aspectos, los ensamblados .NET son similares a los paquetes de bytecode de Java.
fuente
Acabo de pasar un par de horas buscando la mejor herramienta que me permita ver el código IL directamente dentro de Visual Studio.
La única solución que encontré hasta ahora es Msiler https://visualstudiogallery.msdn.microsoft.com/60fc53d4-e414-461b-a27c-3d5d2a53f637
funciona bastante bien!
De lo contrario, la segunda mejor solución, pero sin la integración de Visual Studio, es JetBrains dotPeek, que es bastante sorprendente para ser sincero.
fuente
Sé que esta es una vieja pregunta, y preferiría cualquiera de las herramientas anteriores. Sin embargo, en un apuro, ha habido un visor MSIL en el cuadro con Visual Studio desde al menos la Versión 2005.
La herramienta se llama
ildasm.exe
y se encuentra en las siguientes carpetas después de las instalaciones predeterminadas de Visual Studio: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
"Para obtener más información, consulte: " Cómo: Ver el contenido del ensamblaje " en la Biblioteca MSDN.
fuente
Desde mi experiencia, la mejor fuente de conocimiento relacionado con IL es Andrew Troelsen "Pro C # and .NET Platform". A partir de la 3ª edición, tiene un capítulo realmente excepcional (aproximadamente 50 páginas) sobre cómo entender IL e incluso escribir su propio código y usar ILAsm. He empleado esa información para investigar si existe una herencia múltiple en el mundo .NET. También podría intentar emplear algunas características muy interesantes en IL (por ejemplo, el filtrado de excepciones que solo existe en VB pero no en C #).
Recomiendo leer ese capítulo.
Finalmente, .NET Reflector es un estándar empresarial para investigar el código IL de ensamblajes y el libro de Richter es definitivamente "debe leer" cosas. Pero de otros libros como los mencionados anteriormente, podrías revelar cosas realmente útiles :)
Sí, cada ensamblaje en el mundo .NET contiene un código IL (junto con el manifiesto) que se puede ver a través de Reflector o ILDasm. Aún más, Reflector podría mostrarle código optimizado C # y VB. Esto significa que cualquier persona podría ver el código fuente de un ensamblaje y es por eso que en los productos comerciales se utilizan ofuscadores.
fuente
Si desea ver el idioma intermedio, intente descargar JustDecompile de Telerik (que actualmente es gratuito, aunque requiere registrarse).
Arrastra tu DLL y elige
IL
del cuadro desplegable en la parte superior.fuente
Ahora hay otra opción. Puede hacer esto en VS Code con esta extensión construida con Roslyn. Actualmente está limitado a .NET Core .
fuente