Wie wird der Inhalt des RAM-Speichers angezeigt? [geschlossen]
14
Gibt es eine Möglichkeit, den Inhalt des RAM-Speichers anzuzeigen? Vom ersten bis zum letzten Byte. Ich würde gerne sehen, wo sich das Betriebssystem und alle darauf laufenden Prozesse im RAM befinden. Ist das möglich?
Als Benutzerprozess in einer geschützten Speicherumgebung haben Sie nur Zugriff auf die Kopie des virtuellen Speicherbereichs des Benutzers. Kernel-Speicherplatz, virtueller Speicherplatz anderer Benutzer und nicht verwendeter physischer Speicher sind vor neugierigen Blicken geschützt. Auf der anderen Seite wird ein zufälliger Zeitschnappschuss des physischen SDRAM nicht viel bedeuten, es sei denn, Sie kennen die virtuellen Speicherzuordnungen.
Sägemehl
Arbeitsspeicher Arbeitsspeicher? Also die Seitenzuordnungstabelle?
Sie wären wahrscheinlich viel glücklicher mit einem Tool, das zeigt, wie Speicher zugewiesen wird, als wenn Sie sich die Einsen und Nullen anschauen.
Daniel R Hicks
1
Es war nur aus Neugier
osta
Antworten:
8
Sie könnten einen Kernel-Debugger verwenden, der einen " unformatierten " Speicherzugriff ermöglicht, wie z . B. SoftICE für Windows . Sie können GDB auch so konfigurieren, dass es als Debugger für den Linux-Kernel fungiert . Wenn eine virtuelle Maschine optional ist, unterstützt eine Virtualisierungssoftware das Speichern des Maschinenzustands (einschließlich RAM) auf der Festplatte, die dann weiter analysiert werden kann . Es ist jedoch zu beachten, dass die meisten "modernen" Betriebssysteme die Adressraum-Layout-Randomisierung (ASLR) verwenden. Die echte physische Speicherzuordnung des Systems ist absichtlich fragmentiert, um verschiedene Sicherheitsprobleme und Exploits (z. B. Stapel- / Heap- Pufferüberläufe) zu minimieren.
Für ein bestimmtes Programm, das in einem modernen Betriebssystem ausgeführt wird, können Sie jedoch eine logische Speicherzuordnung für einen bestimmten Prozess / Thread erhalten - vorausgesetzt, Sie verfügen über die entsprechenden Debugsymbole und den entsprechenden Debugger. Wenn Sie eine Gesamtansicht wünschen, wenn die Software / Hardware virtuellen Speicher verwendet , wird die Situation drastisch komplexer. Wenn Sie jedoch buchstäblich möchten, was sich nur im RAM befindet, lesen Sie den ersten Absatz.
Auf den Inhalt des physischen Speichers kann unter Windows über das \Device\PhysicalMemoryObjekt im Objekt-Manager zugegriffen werden . Dies erfordert einen Zugriff auf das System auf Kernel-Ebene. Dies bedeutet, dass Sie ein Programm, höchstwahrscheinlich einen Kernel-Modus-Treiber, installieren müssen, um auf dieses Objekt zuzugreifen.
Unter Linux kann auf den Inhalt des physischen Speichers direkt als Binärdaten zugegriffen werden, indem /dev/memals gelesen wird root. Siehe Was ist / dev / mem? und die mem(4)Manpage für mehr Details.
Ich bin mir nicht sicher, warum Sie bestimmen müssen, wo sich das Betriebssystem und die Prozesse im physischen Speicher befinden ...
Unter Windows können Sie wie die Dienstprogramme RAMMap und PhysMem öffnen \Device\PhysicalMemory(äquivalent zu /dev/kmem) .
user1686
1
Nicht länger. Ab Server 2003 und allen späteren Versionen kann das \DevicePhysicalMemoryObjekt nicht im Benutzermodus geöffnet werden. RAMmap und die meisten anderen Sysinternals-Tools enthalten einen Kernel-Modustreiber, der diesen Teil ihrer Arbeit erledigt.
Antworten:
Sie könnten einen Kernel-Debugger verwenden, der einen " unformatierten " Speicherzugriff ermöglicht, wie z . B. SoftICE für Windows . Sie können GDB auch so konfigurieren, dass es als Debugger für den Linux-Kernel fungiert . Wenn eine virtuelle Maschine optional ist, unterstützt eine Virtualisierungssoftware das Speichern des Maschinenzustands (einschließlich RAM) auf der Festplatte, die dann weiter analysiert werden kann . Es ist jedoch zu beachten, dass die meisten "modernen" Betriebssysteme die Adressraum-Layout-Randomisierung (ASLR) verwenden. Die echte physische Speicherzuordnung des Systems ist absichtlich fragmentiert, um verschiedene Sicherheitsprobleme und Exploits (z. B. Stapel- / Heap- Pufferüberläufe) zu minimieren.
Für ein bestimmtes Programm, das in einem modernen Betriebssystem ausgeführt wird, können Sie jedoch eine logische Speicherzuordnung für einen bestimmten Prozess / Thread erhalten - vorausgesetzt, Sie verfügen über die entsprechenden Debugsymbole und den entsprechenden Debugger. Wenn Sie eine Gesamtansicht wünschen, wenn die Software / Hardware virtuellen Speicher verwendet , wird die Situation drastisch komplexer. Wenn Sie jedoch buchstäblich möchten, was sich nur im RAM befindet, lesen Sie den ersten Absatz.
quelle
Auf den Inhalt des physischen Speichers kann unter Windows über das
\Device\PhysicalMemory
Objekt im Objekt-Manager zugegriffen werden . Dies erfordert einen Zugriff auf das System auf Kernel-Ebene. Dies bedeutet, dass Sie ein Programm, höchstwahrscheinlich einen Kernel-Modus-Treiber, installieren müssen, um auf dieses Objekt zuzugreifen.Unter Linux kann auf den Inhalt des physischen Speichers direkt als Binärdaten zugegriffen werden, indem
/dev/mem
als gelesen wirdroot
. Siehe Was ist / dev / mem? und diemem(4)
Manpage für mehr Details.Ich bin mir nicht sicher, warum Sie bestimmen müssen, wo sich das Betriebssystem und die Prozesse im physischen Speicher befinden ...
quelle
\Device\PhysicalMemory
(äquivalent zu/dev/kmem
) .\DevicePhysicalMemory
Objekt nicht im Benutzermodus geöffnet werden. RAMmap und die meisten anderen Sysinternals-Tools enthalten einen Kernel-Modustreiber, der diesen Teil ihrer Arbeit erledigt.