¿Herramienta para ver la memoria como mapa de bits?

Hago un poco de gráficos de trama y programación de video. Lo que sería muy útil sería algún IDE , complemento , depurador o herramienta que pueda ver una parte de la memoria como una imagen de mapa de bits .

La mayoría de los depuradores le permiten realizar una introspección de tipos compuestos, matrices, cadenas, etc. Sin embargo, cuando se trata de mapas de bits, solo pueden mostrarle la memoria sin procesar, y dado que no soy un hacker de Matrix, es muy difícil diagnosticar problemas aquí.

Sería genial si hubiera alguna herramienta que, dada la ubicación de la memoria, el formato de píxel (por ejemplo, ARGB8888, YUV420) y las dimensiones de la imagen, mostrara una imagen de lo que representa esa memoria. Lo que tengo que hacer actualmente es escribir código para volcar la memoria en un archivo y verlo en un visor externo, que es muy torpe.

Requisitos:

  • Cualquiera de Windows (XP o superior), OS X o Linux
  • Debe trabajar con memoria de programa o integrado en IDE; no debe ser un visor de solo archivos
  • Si es IDE, admite los estándares C/C++ más recientes (C99 y superior, C++11 y superior), no debe requerir lenguaje, plataforma o tipos personalizados
  • Elija entre una serie de formatos de píxeles
  • cualquier precio esta bien

Respuestas (1)

Estoy respondiendo esto, porque no obtuviste otras respuestas durante más de un año. Yo diría que su solicitud es bastante específica.

Fotos en basureros

Si tiene un archivo de volcado de bloqueo de Windows (.dmp), puede abrirlo en WinDbg , que es el depurador gratuito de Microsoft para volcados en modo de usuario y modo kernel.

Hay 4 comandos no documentados que pueden encontrar imágenes en la memoria. Esos comandos son parte de la extensión ext que se carga por defecto:

!findgifs
!findjpegs
!findjpgs
!findpngs

La salida le dará la dirección inicial y final de una imagen en la memoria. Puede usar eso para escribir la imagen en el disco usando el .writememcomando.

Ejemplo de salida de una aplicación Notepad++ en ejecución:

0:000> |
.  0    id: 472c    attach  name: C:\Program Files (x86)\Notepad++\notepad++.exe
0:000> !findpngs
Found:  0062387c    00636f76
Found:  06ed3cfa    07940c87
...
0:000> .writemem c:\tmp\writemem.png 0062387c 00636f76
Writing 136fb bytes............

El resultado fue este archivo PNG:

Archivo PNG extraído de Notepad++

Puede automatizar esto con PyKD para escribir todos los PNG de la memoria al disco. Primero necesitará la dbgCommand()función para hacer !findpngs, luego procesar la cadena (dividir las líneas y extraer la dirección de inicio y final) y luego usarla dbgCommand()nuevamente para hacer el .writemem. Lamentablemente, no lo tengo instalado en este momento, por lo que no puedo proporcionar un script completo.

Por qué considero esto como una respuesta:

Cualquiera de Windows (XP o superior)

WinDbg está disponible para Windows XP a 10. Tal vez necesite diferentes versiones de WinDbg , pero aún deberían estar disponibles.

Debe trabajar con memoria de programa o integrado en IDE; no debe ser un visor de solo archivos

Esta solución funciona desde la memoria (archivo de volcado) con la solución en disco. Es posible que esto no sea 100% lo que desea, pero tal vez aún sea más fácil de hacer (si está programado) que desde cualquier otro IDE.

Elija entre una serie de formatos de píxeles

En realidad, no estoy seguro de cómo detecta eso. En mi humilde opinión, no hay forma de definir explícitamente un formato de píxel.

cualquier precio esta bien

WinDbg y PyKD están disponibles de forma gratuita.

Dump2Imagen

Leyendo tu pregunta la primera vez pensé que estarías buscando algo como esto. Dejaré esto como referencia para otros lectores, si eso es lo que quieren.

La herramienta Dump2Picture puede convertir un volcado de Windows (.dmp) en una imagen. El autor de estos libros lo ha utilizado como elemento de diseño en la parte superior de la portada del libro.

Sin embargo, difícilmente encontrará imágenes reales (como JPG) allí. Las razones son:

  • los píxeles no se alinearán correctamente, es decir, el ancho y el alto de la imagen generada no coinciden con la imagen en la memoria
  • la profundidad de color probablemente no coincida