Tool zum Anzeigen des Speichers als Bitmap?

Ich mache ein bisschen Rastergrafik und Videoprogrammierung. Superpraktisch wäre eine IDE , ein Plugin , ein Debugger oder ein Tool , das in der Lage ist , einen Teil des Speichers als Bitmap - Bild anzuzeigen .

Mit den meisten Debuggern können Sie zusammengesetzte Typen, Arrays, Strings usw. selbst untersuchen. Wenn es jedoch um Bitmaps geht, können sie Ihnen nur den rohen Speicher zeigen, und da ich kein Hacker aus der Matrix bin, ist es sehr schwierig, hier Probleme zu diagnostizieren.

Es wäre großartig, wenn es ein Tool gäbe, das bei gegebenem Speicherort, Pixelformat (z. B. ARGB8888, YUV420) und Bildabmessungen ein Bild davon zeigt, was dieser Speicher darstellt. Was ich derzeit tun muss, ist Code zu schreiben, um den Speicher in eine Datei auszugeben und ihn in einem externen Viewer anzuzeigen, was sehr klobig ist.

Anforderungen:

  • Windows (XP oder höher), OS X oder Linux
  • Muss mit Programmspeicher funktionieren oder in IDE integriert sein; darf kein Nur-Datei-Viewer sein
  • Wenn IDE die neuesten C/C++-Standards (C99 und höher, C++11 und höher) unterstützt, dürfen keine benutzerdefinierten Sprachen, Plattformen oder Typen erforderlich sein
  • Wählen Sie aus einer Reihe von Pixelformaten
  • Jeder Preis ist ok

Antworten (1)

Ich beantworte das, weil Sie seit über einem Jahr keine anderen Antworten mehr bekommen haben. Ich würde sagen, Ihre Anfrage ist ziemlich spezifisch.

Bilder in Müllhalden

Wenn Sie eine Windows-Crash-Dump-Datei (.dmp) haben, können Sie sie in WinDbg öffnen , dem kostenlosen Microsoft-Debugger für Benutzermodus- und Kernelmodus-Dumps.

Es gibt 4 undokumentierte Befehle, die Bilder im Speicher finden können. Diese Befehle sind Teil der ext- Erweiterung, die standardmäßig geladen wird:

!findgifs
!findjpegs
!findjpgs
!findpngs

Die Ausgabe gibt Ihnen die Start- und Endadresse eines Bildes im Speicher. Sie können das verwenden, um das Image mit dem .writememBefehl auf die Festplatte zu schreiben.

Beispielausgabe einer laufenden Notepad++-Anwendung:

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............

Das Ergebnis war diese PNG-Datei:

Aus Notepad++ extrahierte PNG-Datei

Sie können dies mit PyKD automatisieren , um alle PNGs vom Speicher auf die Festplatte zu schreiben. Sie müssen zuerst die dbgCommand()Funktion ausführen !findpngs, dann die Zeichenfolge verarbeiten (die Zeilen aufteilen und die Start- und Endadresse extrahieren) und dann dbgCommand()erneut verwenden, um die .writemem. Leider habe ich es im Moment nicht installiert, daher kann ich kein vollständiges Skript bereitstellen.

Warum ich das als Antwort betrachte:

Jedes von Windows (XP oder höher)

WinDbg ist für Windows XP bis 10 verfügbar. Möglicherweise benötigen Sie verschiedene Versionen von WinDbg , aber sie sollten immer noch verfügbar sein.

Muss mit Programmspeicher funktionieren oder in IDE integriert sein; darf kein Nur-Datei-Viewer sein

Diese Lösung funktioniert aus dem Speicher (Crash-Dump-Datei) mit der Problemumgehung über die Festplatte. Dies ist vielleicht nicht zu 100 % das, was Sie wollen, aber vielleicht ist es immer noch einfacher (wenn es geskriptet ist) als von jeder anderen IDE.

Wählen Sie aus einer Reihe von Pixelformaten

Eigentlich bin ich mir nicht sicher, wie es das erkennt. IMHO gibt es keine Möglichkeit, ein Pixelformat explizit zu definieren.

Jeder Preis ist ok

WinDbg und PyKD sind beide kostenlos erhältlich.

Dump2Picture

Als ich Ihre Frage zum ersten Mal las, dachte ich, Sie würden nach so etwas suchen. Ich werde dies als Referenz für andere Leser hinterlassen, wenn sie das wollen.

Das Tool Dump2Picture kann einen Windows Crash Dump (.dmp) in ein Bild umwandeln. Der Autor dieser Bücher hat es als Gestaltungselement am oberen Rand des Buchcovers verwendet.

Echte Bilder (zB JPGs) findet man dort allerdings kaum. Die Gründe sind:

  • die Pixel werden nicht korrekt ausgerichtet, dh Breite und Höhe des generierten Bildes stimmen nicht mit dem Bild im Speicher überein
  • die Farbtiefe wird wahrscheinlich nicht übereinstimmen