Untersuchen des RAM-Inhalts

12

Ich verwende eine Redis- Datenbank und möchte den Inhalt des von der Anwendung verwendeten Arbeitsspeichers untersuchen.

Ich bin der Meinung, dass die Erklärung, warum ich das tun möchte, sinnvoller ist als die Frage, die ich stellen würde.

Redis ist ein einfacher Schlüsselwertspeicher, der Binärdaten speichert. Ich denke, es wäre ein guter Ort, um Dinge wie das Kodieren zu erforschen, und es wäre interessant für mich, Dinge wie das Überfliegen des RAM nach binären Datensätzen und Dinge wie das Suchen nach einfachen Mustern zu tun. Vielleicht möchten Sie eine Baby-Abfragesprache schreiben, die im RAM gesucht hat.

Ich hatte diese Idee, nachdem ich das Kapitel über Abfragesprachen in SICP gelesen hatte .

Irgendwelche Gedanken, wo ich anfangen soll? Zunächst möchte ich das System fragen, in welchem ​​Adressraum diese Anwendung ausgeführt wird.

MageProspero
quelle

Antworten:

7

Mit gdb können Sie auf den Speicher eines Prozesses zugreifen.

Sie sollten sich auch das Dateisystem "/ proc" ansehen - es enthält Pseudodateien für jeden Prozess. Einige von ihnen können interessante Informationen enthalten

Jakob
quelle
7

cat /proc/[pid]/maps entsprechend den proc manpages.

Sieht aus wie du willst. Wenn Sie die PID benötigen, holen Sie sich diese von ps oder einem anderen Tool.

Diese Adressen ermitteln den verwendeten Adressraum. Einer der Kollegen von defcon hat letztes Jahr createremotethread unter Linux implementiert. Sie könnten das also tun ... und dann jeden beliebigen Speicher auf diese Weise lesen.

Kredit psusi für den Hinweis auf , dass pmap -x [pid]leichter zu lesen ist.

RobotHumans
quelle
3
Beachten Sie, dass pmapdiese Informationen so formatiert werden, dass sie besser lesbar sind.
Psusi
6

Verwenden Sie einen Debugger, dafür sind sie da.

Wenn Sie Ihre eigenen Rollen möchten, geht alles durch ptrace.

Sie können die Speicherzuordnung eines Prozesses (das Inhaltsverzeichnis für den Speicher) in /proc/$pid/mapsanzeigen und den gesamten Speicherinhalt auslesen /proc/$pid/mem. Sie können diese letztere Datei nicht einfach normal öffnen, siehe Wie lese ich unter Linux aus / proc / $ pid / mem?

Gilles 'SO - hör auf böse zu sein'
quelle
1
Sie waren bei einigen meiner Fragen unglaublich hilfreich. Schlagen Sie Bücher vor, die allgemein mit dem Linux-Betriebssystem zu tun haben, oder besonders interessante Webartikel?
MageProspero