Come scaricare la memoria su un file in gdb (osx)? Devo salvare il mio lavoro


9

Devo sapere come posso scaricare la memoria in Safari.app, in un file.

Ho inserito gdb attach 6741 (il mio safari PID).

E adesso?

Ho provato a cercare aiuto su gdb su google, ma non sono riuscito a trovare nulla che mi dicesse cosa fare, anche quando cercavo "come scaricare memoria in gdb" :(

Ho provato a "aiutare il dump", mi ha dato un sacco di comandi, ma nessuno di loro ha funzionato. Il più vicino che mi è venuto è stato:

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

Quindi qual è l'indirizzo di stop? Non lo so? Come intendo conoscere l'indirizzo di stop? Ho provato a cercare su Google "" indirizzo di stop mancante "gdb", non ha aiutato. Non ho idea di come ottengo l'indirizzo di stop.

Ho provato questo:

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

Neanche quello ha funzionato.

Ho capito:

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

Davvero non capisco questo. Tutto quello che voglio è la mia memoria in Safari, scritta in un file.

È davvero importante per me. Ho trascorso circa 2 ore a scrivere il mio povero cuore in Safari, scrivendo alcune informazioni davvero importanti. E poi lo stupido sito web a cui stavo scrivendo, non ha accettato il mio post, perché avevo impiegato tanto tempo a scriverlo, che avevo "disconnesso". Quando ho effettuato nuovamente l'accesso, il mio post era perso.

Rivoglio davvero questo riscritto. Tutto quello che voglio è la memoria di Safari, quindi posso cercare nel suo contenuto alcune parole chiave per vedere se riesco a riavere la mia scrittura.

Qualche idea qualcuno?

Per lo meno, anche se non riprendo a scrivere, imparerò qualcosa su gdb. Che potrebbe tornare utile nello sviluppo del mio software;)

Grazie se puoi aiutarci! Significherebbe molto per me. Lascerò Safari e gdb in esecuzione, finché non avrò una risposta. Non lo lascerò andare finché non scoprirò che posso o non posso riprendere a scrivere.

Se qualcuno vuole dare risposte più generali su come recuperare il lavoro perso ... questa è una buona cosa. Come programmi per cercare nel mio intero disco rigido stringhe specifiche che potrebbero essere state in VRAM prima che il lavoro andasse perso.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html Questa pagina afferma che kill -9 non genera un dump principale. Nonostante ciò che questa pagina dice http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , questo comando "kill -ABRT (PID HERE)", non creerà un dump principale.

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

1
+1 voto positivo: non sono ottimista sulle prospettive di recupero dei tuoi dati, dato quello che hai già provato. Ma è una domanda di debug legittima, chiaramente scritta, con dettagli pertinenti inclusi: non credo che meriti di essere sottovalutato!
Jim Lewis,

NSD. Come trovi la fine del mucchio? Qual è il comando che devi digitare per ottenere il numero che ti viene restituito? Lo sai davvero? O stai solo cercando di non aiutarmi?

Questo non funziona molto bene. Ho provato questo: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Quindi ho digitato "gcore bla2.bin". E indovina? "Comando non definito:" gcore ". Prova" aiuto "." I documenti di Apple affermano che questa funzione non è disponibile su alcuni sistemi. Immagino che significhi anche Mac? Mi chiedo perché i documenti di Apple avrebbero informazioni generiche su unixy gdb che non specifica il comportamento di OSX ...


Dopo un po 'più di sperimentazione, ho trovato questo: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" ha prodotto alcuni dati che non erano interamente zeri. Ma ... qui non c'era nulla di valore ed era solo il primo 64 KB. Questo ... "dump binary memory ~ / dump3.bin 0 0x000fFFFF" ha prodotto un file contenente interamente zeri. 1 MB di zeri. Non ho idea del perché. La mia ipotesi (fino a quando qualcuno che sa come usare gdb in realtà aiuta), è che ho attraversato regioni "inutilizzate", che non sono state nemmeno assegnate da Malloc. E per questo motivo, gdb genera zeri. Dopotutto, Safari contiene più di 1 MB di dati;)

Risposte:


6

Ciao a tutti, ho scoperto come generare un coredump su OSX!

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

Esiste un programma scaricabile lì, in formato sorgente. L'ho scaricato, compilato e, evviva! Ha funzionato! Ha generato un dump core di quasi 1 GB!

Che le informazioni siano presenti o meno non ha molta importanza adesso. Ho imparato a generare coredump su OSX, che sicuramente potrebbe essere un'abilità utile come sviluppatore di software;) Non si sa mai quando un dump di core potrebbe tornare utile.

Posso solo immaginare qualche anno che sto facendo un lavoro importante, e ho bisogno di un dump core per capire cosa sta succedendo, e questa app "gcore" è ciò di cui avevo bisogno. Anche se paga una volta ... questa è una buona cosa.


1
Puoi anche installarlo con: brew install gcore
Guido

Puoi usare queste istruzioni qui per installare rapidamente gcore. Se dice "bash: brew: comando non trovato", installa homebrew usando questo link .
I'm_With_Stupid,

gcoreè incluso in macOS dal 10.12 Sierra. Si trova in /usr/bin/gcoree ha anche una pagina man in /usr/share/man/man1/gcore.1. Questo è ulteriormente confermata dal Homebrew che rifiuta di installare gcorea/usr/local/bin su Sierra o superiore.
PIL2

1

Safari salva i dati del modulo per tutti i moduli (a meno che non sia stato disattivato o il sito non contrassegni il modulo come non da salvare), in un file di database crittografato. Puoi trovare la password per il file nel tuo portachiavi di accesso e il file è in ~/Library/Safari/Form Values, quindi teoricamente, potresti estrarre i dati dal file e vedere se ciò che hai digitato è lì.

Tuttavia, ho avuto un hack e non riesco a capire quale sia il formato del file o come sia crittografato, quindi non so come ottenere effettivamente il contenuto, sono sicuro che qualcuno lo fa :)


Se Safari ha salvato il post in questo file, puoi anche recuperarlo semplicemente andando nello stesso modulo e digitando le prime lettere del testo perso. L'intero dovrebbe apparire come suggerimento per il completamento automatico.

Il completamento automatico non funziona per i contenuti dei post. Funziona solo per i campi a riga singola. Non interi articoli con centinaia di righe.

Grazie. Dubito che questo file contenga contenuti post. Sono riuscito a scaricare da 0 a 7ffffFFFF, creando un file da 2 GB. Tuttavia, sembrava contenere interamente zeri. Qualcosa non è proprio qui. Perché questo ?: dump memory ~ / bla.bin 0 0x7fffFFFF Risultato in un file contenente interamente zeri? Safari non funziona su zeri, vero? Suppongo che debba contenere del codice al suo interno? ;)

0

È sempre possibile attivare la registrazione in GDB set logging on

Quindi, tutto ciò che fai viene stampato nel file di registro (di solito gdb.txt). Quindi puoi semplicemente iniziare a stampare la memoria usando il xcomando e tutto andrà al file di registro e allo schermo.


0

Verifica se OSX ha un comando pmap, ti mostrerà la memoria mappata di qualsiasi processo in esecuzione. Questo di solito viene letto da / proc nei sistemi linux. Quindi, se stai cercando informazioni particolari, puoi usare il comando gdb find. Digita help find in gdb per ulteriori istruzioni.


-1

Lo so, vecchio thread ...

gdb ha un comando integrato per scaricare un'immagine principale del processo / programma corrente.

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

entrambi i comandi fanno lo stesso, il nome del file è facoltativo, il valore predefinito è ' core. <process_ip> '

Eh! sembra che ci sia anche un'utility installata (con gdb) chiamata 'gcore' per scaricare anche un programma attualmente in esecuzione. Naturalmente, è più facile mettere in pausa il processo con gdb, quindi scaricarlo.

Trovare cose nuove ogni giorno! ... ma gdb ha la funzione integrata ... solo così sai ...


(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 sembra suggerire che non sia implementato su OS X.
Slipp D. Thompson
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.