Crear un volcado de memoria en windows 7 (Memory Dump)

10 05 2012

Una característica importante que se incluyo para Windows Vista y Windows 7 es las posibilidad de crear volcados de memoria (Memory Dump), antes se llamaban crash dump.

Un volcado de memoria es un archivo que almacena el contenido de la ejecución de nuestro programa (Instrucciones+Memoria), generalmente son usados para depurar sin embargo aquí expondremos como hacerlo.

Primero tendremos una consola(C#, con Visual Studio 2010, ConsolaPrueba.exe) creada con una sola línea:

throw new Excepcion(“Prueba”);

 

Posteriormente ejecutaremos la consola y dejaremos que nos muestre que ocurrió una excepción sin cerrar el programa.

 

Pasos para crear un archivo de volcado:

1. Abrir el administrador de tareas.

2. En la pestaña de procesos, veremos una lista de *.exe que están en ejecución actualmente

3. Seleccionamos ConsolaPrueba.exe y damos clic derecho seleccionaremos “Create dump file”

 

En el siguiente post se expondrá como depurar el archivo de volcado que creamos con la utileria WINDBG.





Integrando Ensamblador y SSE2(Streaming SIMD Extensions) con ASP .NET y WPF(Windows Presentation Foundation)

8 05 2010

Continuando con algunos experimentos en este post veremos como integrar Lenguaje ensamblador y SSE(Streaming SIMD Extensions) con C/C++, ASP .NET, WPF(Windows Presentation Foundation), de inicio mostrare el codigo ensamblador y SSE2 que se integrara, use Visual Studio 2010 para realizar este demo(puedes abajo descargar el código):

Ensamblador(x86 PP): Ejecuta una suma entre dos enteros usando los registros de 32-bits “EDX”, y código “ADD,MOV”, bastante simple pero servirá para mostrar como esto es posible:

Esto lo lograremos usando Visual Studio 2010, creamos un proyecto DLL Win32 que le llamé “TestLib.dll” para Visual C++, veremos que nos crea un template con todas las herramientas listas para crear una DLL y sigo escribiendo mi código de la función que sumara dos enteros de 32 bit usando ensamblador comente algunas líneas del código para explicarlo:

image

TESTLIB_API es un sobrenombre a “__declspec(dllimport)” que nos permite exportar funciones (hacerlas visibles) de la DLL y puedan ser consumidas posteriormente por otras aplicaciones.

Streaming SIMD Extensions 2: El siguiente paso es crear mi función para ejecutar instrucciones SSE2 en nuestro procesador, necesitamos un procesador compatible con esta tecnología, que en usos generales sirve para acelerar operación multimedia y juegos, en este caso usaremos “ADDPD” que básicamente nos suma dos matrices: (A,B)(C+B)=(A+C,B+D), es una instrucción muy usada en transformación de ViewPort-Matrix, escenas 3D, función:

image

He creado pruebas desde C++ para esta DLL, que van empaquetadas con todo el código fuente.

Ahora ya tenemos 2 funciones en ensamblador y SSE que llevaremos al siguiente paso:

.NET Framework 4, nos permite usar o ejecutar código nativo, Microsoft ha creado namespaces & clases que nos permiten interoperar con código nativo(unmanaged code), de tal forma que podemos consumir el código anteriormente expuesto, usaremos el marshaling para ejecutar nuestro código:

Primero creare una librería C# para .NET Framework 4(llamada ClassLibSSE-ASM), y dentro de la clase escribiré este código:

image

Una vez que lo he compilado ya tengo listo mi código para llevarlo a cualquier lado ya sea a ASP .NET o WPF, como veremos abajo:

ASP .NET: Crearemos un proyecto web app para .NET 4, y dentro de nuestro archivo default.aspx colocare los controles que encestaré para leer la entrada del usuario:

image

Posterior a esto, agregare referencia mi librería en .NET “ClassLibSSE-ASM” y copiare mi DLL de C/C++ “TesLib.dll” a mi carpeta “bin” de mi´aplicación web y seguiré escribiendo el código para mi eventos calcular:

image

Dentro de los eventos click llamaré los métodos correspondientes que están en ClassLibSSE_ASM.ClassSSESAMCLR.*, primero extraigo de los textBox mis datos y los paso a un tipo double[] a,b y c será el receptor de mi resultado, después de llamar Add_Array2SSE(a,b,c), y muestro resultados de la suma de matrices. y tendré resultados usando SSE digamos una suma de matrices optimizada por el procesador.

Mando a llamar la suma de enteros y muestro resultados

Puedo utilizar el debugger para ver como van viajando mis datos desde .NET a C/C++ y de ahí ensamblador/SSE:

ASP .NET Ensamblador(Da click para ver en grande):

imageimage image image

ASP .NET (Da click para ver mas grande.), SSE:

image image image image image image

Código(Solución de Visual Studio 2010):

DESCARGAR