Comment vider la mémoire dans un fichier dans gdb (osx)? Besoin de sauver mon travail

9

J'ai besoin de savoir comment vider la mémoire dans Safari.app, dans un fichier.

J'ai entré gdb attach 6741 (mon safari PID).

Maintenant quoi?

J'ai essayé de chercher de l'aide sur gdb sur google, mais je n'ai rien trouvé qui me dise quoi faire, même lorsque je cherchais "comment vider la mémoire dans gdb" :(

J'ai essayé "help dump", cela m'a donné un tas de commandes, mais aucune n'a fonctionné. Le plus proche je suis venu:

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

Alors, quelle est l'adresse d'arrêt? Je ne sais pas? Comment dois-je connaître l'adresse d'arrêt? J'ai essayé de rechercher sur google "" l'adresse d'arrêt manquante "gdb", cela n'a pas aidé. Je ne sais pas comment obtenir l'adresse d'arrêt.

J'ai essayé ceci:

(gdb) vidage de la mémoire ~ / safaridump.bin 0 0xffffffff

Cela n'a pas fonctionné non plus.

J'ai compris ceci:

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

Je ne comprends vraiment pas ça. Tout ce que je veux, c'est ma mémoire dans Safari, écrite dans un fichier.

C'est vraiment important pour moi. J'ai passé environ 2 heures à taper mon pauvre cœur dans Safari, à écrire des informations vraiment importantes. Et puis le stupide site Web auquel j'écrivais n'a pas accepté mon message, parce que j'avais mis tellement de temps à l'écrire, que je m'étais «déconnecté». Au moment où je me suis reconnecté, mon poste a été perdu.

Je veux vraiment que cette écriture revienne. Tout ce que je veux, c'est la mémoire de Safari, donc je peux rechercher dans son contenu quelques mots-clés pour voir si je peux récupérer mon écriture.

Des idées quelqu'un?

À tout le moins, même si je ne récupère pas mon écriture, j'apprendrai quelque chose sur gdb. Ce qui pourrait être utile dans mon développement logiciel;)

Merci si tu peux aider! Cela signifierait tellement pour moi. Je vais laisser Safari et gdb fonctionner jusqu'à ce que j'obtienne une réponse. Je ne laisserai pas ça aller jusqu'à ce que je découvre que je peux ou non récupérer mon écriture.

Si quelqu'un veut donner des réponses plus générales sur la façon de récupérer le travail perdu ... c'est une bonne chose. Tels que des programmes pour rechercher sur tout mon disque dur des chaînes spécifiques qui auraient pu se trouver dans VRAM avant la perte du travail.

...

http://www.mail-archive.com/[email protected]/msg22978.html Cette page indique que kill -9 ne génère pas de vidage de mémoire. Malgré ce que dit cette page http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , cette commande "kill -ABRT (PID HERE)" ne créera pas de vidage de mémoire.

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

la source
1
+1 sympathie upvote - Je ne suis pas optimiste quant aux perspectives de récupération de vos données, compte tenu de ce que vous avez déjà essayé. Mais c'est une question de débogage légitime, clairement écrite, avec des détails pertinents: je ne pense pas qu'elle mérite d'être sous-estimée!
Jim Lewis
NSD. Comment trouvez-vous la fin du tas? Quelle est la commande que vous devez taper pour que le numéro vous soit retourné? Le savez-vous vraiment? Ou essayez-vous simplement de ne pas m'aider?
Cela ne fonctionne pas très bien. J'ai essayé ceci: < developer.apple.com/mac/library/documentation/DeveloperTools/… > J'ai donc tapé "gcore bla2.bin". Et je suppose que je reçois? "Commande non définie:" gcore ". Essayez" help "." Les documents d'Apple indiquent que cette fonction n'est pas disponible sur certains systèmes. Je suppose que cela signifie aussi les Mac? Je me demande pourquoi les docs d'Apple auraient des informations génériques sur le gdb unixy qui ne spécifie pas le comportement d'OSX ...
developer.apple.com/mac/library/documentation/DeveloperTools/… était le lien, d'une manière ou d'une autre, il s'est cassé?
Après un peu plus d'expérimentation, j'ai trouvé ceci: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" a produit des données qui n'étaient pas entièrement des zéros. Mais ... il n'y avait rien de valeur ici et ce n'était que le premier 64 Ko. Cette ... "vidage de la mémoire binaire ~ / dump3.bin 0 0x000fFFFF" a produit un fichier contenant entièrement des zéros. 1 Mo de zéros. Je ne sais pas pourquoi. Ma supposition (jusqu'à ce que quelqu'un qui sait utiliser gdb aide vraiment), c'est que j'ai traversé des régions "inutilisées", qui n'étaient même pas allouées par malloc. Et à cause de cela, gdb génère des zéros. Après tout, Safari contient plus de 1 Mo de données;)

Réponses:

6

Salut tout le monde, j'ai trouvé comment générer un coredump sur OSX!

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

Il existe un programme téléchargeable, sous forme de source. Je l'ai téléchargé, compilé et, hourra! Ça a marché! Il a généré un vidage de mémoire de près de 1 Go!

Qu'il y ait ou non des informations là-dedans n'a plus vraiment d'importance maintenant. J'ai appris à générer des coredumps sur OSX, ce qui pourrait certainement être une compétence pratique en tant que développeur de logiciels;) Vous ne savez jamais quand un vidage de mémoire pourrait être utile.

Je peux imaginer quelques années que je fais un travail important, et j'ai besoin d'un core dump pour comprendre ce qui se passe, et cette application "gcore" est ce dont j'avais besoin. Même si ça rapporte une fois ... c'est une bonne chose.

boytheo
la source
1
Vous pouvez également l'installer avec: brew install gcore
Guido
Vous pouvez utiliser ces instructions ici pour installer rapidement gcore. S'il indique que "bash: brew: command not found", installez homebrew en utilisant ce lien .
I'm_With_Stupid
gcoreest inclus dans macOS depuis 10.12 Sierra. Il est situé sur /usr/bin/gcoreet possède également une page de manuel sur /usr/share/man/man1/gcore.1. Ceci est confirmé par Homebrew qui refuse d'installer gcoreà/usr/local/bin la Sierra ou plus.
GDP2
1

Safari enregistre les données de formulaire pour tous les formulaires (sauf si vous les avez désactivées ou si le site marque le formulaire comme non à sauvegarder), dans un fichier de base de données crypté. Vous pouvez trouver le mot de passe du fichier dans votre trousseau de connexion, et le fichier est à ~/Library/Safari/Form Values, donc théoriquement, vous pouvez extraire les données du fichier et voir si ce que vous avez tapé s'y trouve.

Cependant, j'ai eu un piratage, et je ne peux pas déterminer le format du fichier, ni comment il est crypté, donc je ne sais pas comment obtenir le contenu, je suis sûr que quelqu'un le fait :)

James
la source
Si Safari a enregistré le message dans ce fichier, vous pouvez également le récupérer simplement en accédant au même formulaire et en tapant les premières lettres du texte perdu. L'ensemble devrait apparaître comme suggestion de saisie semi-automatique.
La fonction de saisie semi-automatique ne fonctionne pas pour le contenu de la publication. Cela ne fonctionne que pour les champs à ligne unique. Pas des articles entiers avec des centaines de lignes.
Merci. Je doute que ce fichier contienne du contenu. J'ai réussi à vider 0 à 7ffffFFFF, créant un fichier de 2 Go. Cependant, il semblait contenir entièrement des zéros. Quelque chose ne va pas bien ici. Pourquoi cela?: Vider la mémoire ~ / bla.bin 0 0x7fffFFFF Résultat dans un fichier contenant entièrement des zéros? Safari ne fonctionne pas sur des zéros, n'est-ce pas? Je suppose qu'il doit contenir du code à l'intérieur? ;)
0

Vous pouvez toujours activer la connexion dans GDB set logging on

Ensuite, tout ce que vous faites est imprimé dans le fichier journal (généralement gdb.txt). Vous pouvez donc simplement commencer à imprimer la mémoire à l'aide de la xcommande, et tout ira dans le fichier journal ainsi que l'écran.

alesplin
la source
0

Vérifiez si OSX a une commande pmap, elle vous montrera la mémoire mappée de tout processus en cours d'exécution. Ceci est généralement lu depuis / proc dans les systèmes Linux. Ensuite, si vous recherchez une information particulière, vous pouvez utiliser la commande gdb find. Tapez help find dans gdb pour plus d'instructions.

ychaouche
la source
-1

Je sais, vieux fil ...

gdb a une commande intégrée pour vider une image de base du processus / programme actuel.

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

les deux commandes font de même, le nom de fichier est facultatif, par défaut ' core. <process_ip> '

Huh! il semble qu'il y ait même un utilitaire installé (avec gdb) nommé 'gcore' pour vider également un programme en cours d'exécution. Bien sûr, il est plus facile de suspendre le processus avec gdb, puis de le vider.

Trouver de nouvelles choses chaque jour! ... mais gdb a la fonction intégrée ... comme ça tu sais ..

lornix
la source
(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 semble suggérer qu'il n'est pas implémenté sur OS X.
Slipp D. Thompson