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 ..
Antworten:
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.
quelle
gcore
ist seit 10.12 Sierra in macOS enthalten . Es befindet sich unter/usr/bin/gcore
und hat auch eine Manpage unter/usr/share/man/man1/gcore.1
. Dies wird weiter von Homebrew bestätigt, das sich weigertgcore
,/usr/local/bin
auf Sierra oder höher zu installieren .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 :)
quelle
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
x
Befehl mit dem Drucken des Speichers beginnen , und alles wird sowohl in die Protokolldatei als auch auf den Bildschirm verschoben.quelle
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.
quelle
Ich weiß, alter Thread ...
gdb verfügt über einen integrierten Befehl zum Speichern eines Kernabbilds des aktuellen Prozesses / Programms.
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 ..
quelle
(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".