Wie speichere ich Speicher in eine Datei in gdb (osx)? Ich muss meine Arbeit retten

9

Ich muss wissen, wie ich Speicher in Safari.app in eine Datei kopieren kann.

Ich habe gdb attach 6741 (meine Safari-PID) eingegeben.

Was jetzt?

Ich habe versucht, auf Google nach Hilfe bei gdb zu suchen, aber ich konnte nichts finden, was mir sagte, was ich tun soll, selbst wenn ich nach "So speichern Sie Speicher in gdb" suchte :(

Ich habe "Help Dump" versucht, es gab mir eine Reihe von Befehlen, aber keiner von ihnen funktionierte. Am nächsten kam ich:

(gdb) dump memory ~/safaridump.bin 0
Missing stop address.

Wie lautet die Stoppadresse? Ich weiß es nicht? Wie soll ich die Stoppadresse kennen? Ich habe versucht, auf Google nach "" fehlender Stoppadresse "gdb" zu suchen, es hat nicht geholfen. Ich habe keine Ahnung, wie ich die Stoppadresse bekomme.

Ich habe es versucht:

(gdb) dump memory ~ / safaridump.bin 0 0xffffffff

Das hat auch nicht funktioniert.

Ich schaff das:

gdb stack crawl at point of internal error:
0   gdb-i386-apple-darwin               0x0012fd8f internal_vproblem + 316
1   gdb-i386-apple-darwin               0x0012ffd3 internal_verror + 43
2   gdb-i386-apple-darwin               0x00130008 align_down + 0
3   gdb-i386-apple-darwin               0x00130a21 xstrvprintf + 0
4   gdb-i386-apple-darwin               0x00130c25 xmalloc + 40
5   gdb-i386-apple-darwin               0x000045d6 dump_memory_to_file + 241
6   gdb-i386-apple-darwin               0x0012dd3d execute_command + 713
7   gdb-i386-apple-darwin               0x0008815d command_handler + 213
8   gdb-i386-apple-darwin               0x000891af command_line_handler + 1120
9   gdb-i386-apple-darwin               0x001c2486 rl_callback_read_char + 137
10  gdb-i386-apple-darwin               0x000882ed rl_callback_read_char_wrapper + 18
11  gdb-i386-apple-darwin               0x000874b7 handle_file_event + 349
12  gdb-i386-apple-darwin               0x00086e7e process_event + 131
13  gdb-i386-apple-darwin               0x00087c38 gdb_do_one_event + 1178
14  gdb-i386-apple-darwin               0x00081bfd catch_errors + 78
/SourceCache/gdb/gdb-1346/src/gdb/utils.c:1208: internal-error: virtual memory     exhausted.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) n

Ich verstehe das wirklich nicht. Alles was ich will, ist mein Gedächtnis in Safari, geschrieben in eine Datei.

Es ist wirklich wichtig für mich. Ich verbrachte ungefähr 2 Stunden damit, mein armes Herz in Safari zu tippen und einige wirklich wichtige Informationen aufzuschreiben. Und dann hat die blöde Website, auf der ich schrieb, meinen Beitrag nicht angenommen, weil ich so lange gebraucht hatte, dass ich mich "abgemeldet" hatte. Als ich mich wieder angemeldet hatte, war mein Beitrag verloren.

Ich möchte dieses Schreiben wirklich zurück. Ich möchte nur den Speicher von Safari, damit ich den Inhalt nach ein paar Schlüsselwörtern durchsuchen kann, um zu sehen, ob ich mein Schreiben zurückerhalten kann.

Irgendwelche Ideen jemand?

Zumindest werde ich etwas über GDB lernen, auch wenn ich mein Schreiben nicht zurück bekomme. Was sich in meiner Softwareentwicklung als nützlich erweisen könnte;)

Danke, wenn Sie helfen können! Es würde mir so viel bedeuten. Ich werde Safari und GDB laufen lassen, bis ich eine Antwort bekomme. Ich werde das nicht loslassen, bis ich herausfinde, dass ich mein Schreiben zurückbekommen kann oder nicht.

Wenn jemand allgemeinere Antworten geben möchte, wie verlorene Arbeit wiederhergestellt werden kann, ist das eine gute Sache. Zum Beispiel Programme zum Durchsuchen meiner gesamten Festplatte nach bestimmten Zeichenfolgen, die sich möglicherweise im VRAM befanden, bevor die Arbeit verloren ging.

...

http://www.mail-archive.com/[email protected]/msg22978.html Auf dieser Seite wird angegeben, dass kill -9 keinen Core-Dump generiert. Trotz der Angaben auf dieser Seite http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS erstellt dieser Befehl "kill -ABRT (PID HERE)" keinen Core-Dump.

ls -la /cores
total 0
drwxrwxr-t@  2 root  admin    68 23 Jun 07:19 .
drwxrwxr-t  38 root  admin  1360 14 Dec 16:06 ..

quelle
1
+1 Sympathie-Upvote - Ich bin nicht optimistisch über die Aussichten, Ihre Daten wiederherzustellen, angesichts dessen, was Sie bereits versucht haben. Aber es ist eine legitime Debugging-Frage, klar geschrieben, mit relevanten Details: Ich denke nicht, dass es verdient, herabgestimmt zu werden!
Jim Lewis
NSD. Wie finden Sie das Ende des Haufens? Welchen Befehl müssen Sie eingeben, um die Nummer an Sie zurückzusenden? Weißt du es eigentlich? Oder versuchst du nur, mir nicht zu helfen?
Das funktioniert nicht sehr gut. Ich habe Folgendes versucht: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Also habe ich "gcore bla2.bin" eingegeben. Und denke ich verstehe? "Undefinierter Befehl:" gcore ". Versuchen Sie" help "." Laut Apple-Dokumenten ist diese Funktion auf einigen Systemen nicht verfügbar. Ich denke, das bedeutet auch Macs? Ich frage mich, warum Apples Dokumente generische Informationen über die unixy GDB enthalten, die das Verhalten von OSX nicht spezifizieren ...
Nach ein wenig mehr Experimentieren fand ich Folgendes: "Binärspeicher sichern ~ / dump3.bin 0 0x0000FFFF" erzeugte einige Daten, die nicht ganz Nullen waren. Aber ... hier war nichts von Wert und es waren nur die ersten 64 KB. Dieser ... "Dump-Binärspeicher ~ / dump3.bin 0 0x000fFFFF" erzeugte eine Datei, die vollständig Nullen enthielt. 1 MB Nullen. Ich habe keine Idee warum. Meine Vermutung (bis jemand, der weiß, wie man GDB verwendet, tatsächlich hilft) ist, dass ich "unbenutzte" Regionen durchquert habe, die nicht einmal von Malloc zugewiesen wurden. Aus diesem Grund gibt gdb Nullen aus. Immerhin enthält Safari mehr als 1 MB Daten;)

Antworten:

6

Hallo allerseits, ich habe herausgefunden, wie man unter OSX einen Coredump generiert!

http://osxbook.com/book/bonus/chapter8/core/

Dort gibt es ein herunterladbares Programm in Quellform. Ich habe es heruntergeladen, kompiliert und, hurra! Es funktionierte! Es wurde ein Core-Dump von fast 1 GB generiert!

Ob die Informationen dort enthalten sind oder nicht, spielt jetzt keine Rolle mehr. Ich habe gelernt, wie man unter OSX Coredumps generiert, was als Softwareentwickler definitiv eine praktische Fähigkeit sein kann;) Man weiß nie, wann ein Core Dump nützlich sein könnte.

Ich kann mir nur ein paar Jahre vorstellen, in denen ich einen wichtigen Job mache, und ich brauche einen Core Dump, um herauszufinden, was los ist, und diese "Gcore" -App ist das, was ich brauchte. Auch wenn es sich einmal auszahlt ... das ist eine gute Sache.

Boytheo
quelle
1
Sie können es auch installieren mit: Brew Install Gcore
Guido
Sie können diese Anweisungen hier verwenden , um gcore schnell zu installieren. Wenn "bash: brown: Befehl nicht gefunden" angezeigt wird, installieren Sie Homebrew über diesen Link .
Ich bin mit dummem
gcoreist seit 10.12 Sierra in macOS enthalten . Es befindet sich unter /usr/bin/gcoreund hat auch eine Manpage unter /usr/share/man/man1/gcore.1. Dies wird weiter von Homebrew bestätigt, das sich weigert gcore,/usr/local/bin auf Sierra oder höher zu installieren .
GDP2
1

Safari speichert Formulardaten für alle Formulare (es sei denn, Sie haben sie deaktiviert oder die Site markiert das Formular als nicht zu speichern) in einer verschlüsselten Datenbankdatei. Sie finden das Kennwort für die Datei in Ihrem Anmeldeschlüsselbund, und die Datei befindet sich unter ~/Library/Safari/Form Values. Theoretisch können Sie die Daten aus der Datei extrahieren und prüfen, ob sich dort die eingegebenen Daten befinden.

Ich hatte jedoch einen Hack und kann nicht herausfinden, welches Format die Datei hat oder wie sie verschlüsselt ist. Ich weiß also nicht, wie ich tatsächlich an den Inhalt komme, aber ich bin mir sicher, dass es jemand tut :)

James
quelle
Wenn Safari den Beitrag in dieser Datei gespeichert hat, können Sie ihn auch einfach zurückerhalten, indem Sie zum selben Formular gehen und die ersten Buchstaben des verlorenen Textes eingeben. Das gesamte sollte als Vorschlag für die automatische Vervollständigung angezeigt werden.
Die automatische Vervollständigung funktioniert nicht für Post-Inhalte. Es funktioniert nur für einzeilige Felder. Nicht ganze Artikel mit Hunderten von Zeilen.
Vielen Dank. Ich bezweifle, dass diese Datei Post-Inhalte enthält. Ich habe es geschafft, 0 bis 7ffffFFFF zu sichern und eine 2-GB-Datei zu erstellen. Es schien jedoch vollständig Nullen zu enthalten. Hier stimmt etwas nicht. Warum sollte das?: Speicherauszug ~ / bla.bin 0 0x7fffFFFF Ergebnis einer Datei, die vollständig Nullen enthält? Safari läuft nicht auf Nullen, oder? Ich gehe davon aus, dass darin Code enthalten sein muss. ;)
0

Sie können die Anmeldung jederzeit in GDB aktivieren set logging on

Anschließend wird alles, was Sie tun, in die Protokolldatei (normalerweise gdb.txt) gedruckt. Sie können also einfach mit dem xBefehl mit dem Drucken des Speichers beginnen , und alles wird sowohl in die Protokolldatei als auch auf den Bildschirm verschoben.

Alesplin
quelle
0

Wenn OSX über einen pmap-Befehl verfügt, wird der zugeordnete Speicher eines laufenden Prozesses angezeigt. Dies wird normalerweise aus / proc in Linux-Systemen gelesen. Wenn Sie nach bestimmten Informationen suchen, können Sie den Befehl gdb find verwenden. Geben Sie help find in gdb ein, um weitere Anweisungen zu erhalten.

ychaouche
quelle
-1

Ich weiß, alter Thread ...

gdb verfügt über einen integrierten Befehl zum Speichern eines Kernabbilds des aktuellen Prozesses / Programms.

generate-core-file [filename]
gcore [filename]

Beide Befehle machen dasselbe, der Dateiname ist optional, standardmäßig ' core. <Prozess_IP> '

Huh! Anscheinend ist sogar ein Dienstprogramm (mit gdb) namens 'gcore' installiert, mit dem auch ein aktuell ausgeführtes Programm gesichert werden kann. Natürlich ist es einfacher, den Prozess mit gdb anzuhalten und dann zu sichern.

Jeden Tag neue Dinge finden! ... aber gdb hat die Funktion eingebaut ... nur damit du weißt ..

lornix
quelle
(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
Slipp D. Thompson
2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html scheint darauf hinzudeuten , dass es unter OS X nicht implementiert ist.
Slipp D. Thompson