¿Cómo volcar la memoria a un archivo en gdb (osx)? Necesito rescatar mi trabajo

9

Necesito saber cómo puedo volcar memoria en Safari.app, a un archivo.

Ingresé gdb attach 6741 (mi safari PID).

¿Ahora que?

Intenté buscar ayuda en gdb en google, pero no pude encontrar nada que me dijera qué hacer, incluso cuando busqué "cómo volcar la memoria en gdb" :(

Intenté "help dump", me dio un montón de comandos, pero ninguno funcionó. Lo más cerca que vine fue:

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

Entonces, ¿cuál es la dirección de parada? ¿No lo sé? ¿Cómo debo saber la dirección de parada? Intenté buscar en Google "" dirección de detención faltante "gdb", no me ayudó. No tengo idea de cómo obtengo la dirección de parada.

Intenté esto:

(gdb) volcar memoria ~ / safaridump.bin 0 0xffffffff

Eso tampoco funcionó.

Tengo esto:

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

Realmente no entiendo esto. Todo lo que quiero es mi memoria en Safari, escrita en un archivo.

Es realmente importante para mi. Pasé unas 2 horas escribiendo mi pobre corazón en Safari, escribiendo información realmente importante. Y luego el estúpido sitio web en el que estaba escribiendo no aceptó mi publicación, porque había tardado tanto en escribirla que me había "desconectado". Cuando volví a iniciar sesión, mi publicación estaba perdida.

Realmente quiero que me devuelvan este escrito. Todo lo que quiero es la memoria de Safari, por lo que puedo buscar en su contenido algunas palabras clave para ver si puedo recuperar mi escritura.

¿Alguna idea de alguien?

Por lo menos, incluso si no recupero mi escritura, aprenderé algo sobre gdb. Lo que podría ser útil en mi desarrollo de software;)

¡Gracias si puedes ayudar! Significaría mucho para mí. Voy a dejar Safari y gdb ejecutándose, hasta que obtenga una respuesta. No lo dejaré pasar hasta que descubra que puedo o no puedo recuperar mi escritura.

Si alguien quiere dar respuestas más generales sobre cómo recuperar el trabajo perdido ... eso es algo bueno. Tales como programas para buscar en todo mi disco duro cadenas específicas que podrían haber estado en VRAM antes de que se perdiera el trabajo.

...

http://www.mail-archive.com/[email protected]/msg22978.html Esta página dice que kill -9 no genera un volcado del núcleo. A pesar de lo que dice esta página http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , este comando "kill -ABRT (PID AQUÍ)", no creará un volcado del núcleo.

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

fuente
1
Voto de simpatía de +1: no soy optimista sobre las perspectivas de recuperar sus datos, dado lo que ya ha intentado. Pero es una pregunta de depuración legítima, claramente escrita, con detalles pertinentes incluidos: ¡No creo que merezca ser rechazado!
Jim Lewis
NSD. ¿Cómo encuentras el final del montón? ¿Cuál es el comando que debe escribir para que le devuelvan el número? ¿De verdad lo sabes? ¿O simplemente estás tratando de no ayudarme?
Esto no funciona muy bien. Intenté esto: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Entonces escribí "gcore bla2.bin". ¿Y adivina qué consigo? "Comando indefinido:" gcore ". Prueba con" ayuda "." Los documentos de Apple dicen que esta función no está disponible en algunos sistemas. ¿Supongo que eso significa Mac también? Me pregunto por qué documentos de Apple tendrían información genérica sobre el BGF unixy que no especifica el comportamiento de OSX ...
developer.apple.com/mac/library/documentation/DeveloperTools/… fue el enlace, de alguna manera se rompió?
Después de experimentar un poco más, encontré esto: "volcar memoria binaria ~ / dump3.bin 0 0x0000FFFF" produjo algunos datos que no eran completamente ceros. Pero ... no había nada de valor aquí y solo eran los primeros 64 KB. Esto ... "volcar memoria binaria ~ / dump3.bin 0 0x000fFFFF" produjo un archivo que contiene ceros por completo. 1 MB de ceros. No tengo ni idea de porqué. Mi suposición (hasta que alguien que sepa cómo usar gdb realmente ayude), es que he cruzado regiones "no utilizadas", que ni siquiera fueron asignadas por malloc. Y debido a esto, gdb genera ceros. Después de todo, Safari contiene más de 1 MB de datos;)

Respuestas:

6

Hola a todos, ¡encontré cómo generar un coredump en OSX!

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

Hay un programa descargable allí, en forma de fuente. Lo descargué, lo compilé y ¡hurra! ¡Funcionó! ¡Generó un volcado de núcleo de casi 1 GB!

Si la información está allí o no, no importa en este momento. Aprendí a generar coredumps en OSX, lo que definitivamente podría ser una habilidad útil como desarrollador de software;) Nunca se sabe cuándo un volcado de núcleo podría ser útil.

Solo puedo imaginar que hace unos años estoy haciendo un trabajo importante, y necesito un volcado del núcleo para descubrir qué está pasando, y esta aplicación "gcore" es lo que necesitaba. Incluso si vale la pena una vez ... esto es algo bueno.

boytheo
fuente
1
También puede instalarlo con: brew install gcore
Guido
Puede usar estas instrucciones aquí para instalar rápidamente gcore. Si dice que "bash: brew: comando no encontrado", instale homebrew usando este enlace .
I'm_With_Stupid
gcoreestá incluido en macOS desde 10.12 Sierra. Se encuentra en /usr/bin/gcorey también tiene una página de manual en /usr/share/man/man1/gcore.1. Esto se ve confirmado por Homebrew, que se niega a instalar gcorea/usr/local/bin sobre Sierra o superior.
GDP2
1

Safari guarda los datos del formulario para todos los formularios (a menos que lo haya desactivado o el sitio marque el formulario como no para ser guardado), en un archivo de base de datos cifrado. Puede encontrar la contraseña para el archivo en su llavero de inicio de sesión, y el archivo está en ~/Library/Safari/Form Values, por lo que, en teoría, podría extraer los datos del archivo y ver si lo que escribió está allí.

Sin embargo, he tenido un hack, y no puedo determinar qué formato tiene el archivo o cómo está encriptado, así que no sé cómo llegar realmente al contenido, estoy seguro de que alguien lo hace :)

James
fuente
Si Safari guardó la publicación en este archivo, también puede recuperarla simplemente yendo al mismo formulario y escribiendo las primeras letras del texto perdido. Todo debería aparecer como la sugerencia de autocompletar.
Lo de autocompletar no funciona para el contenido de la publicación. Solo funciona para campos de una sola línea. No artículos completos con cientos de líneas.
Gracias. Dudo que este archivo contenga contenido publicado. Logré volcar 0 a 7ffffFFFF, creando un archivo de 2GB. Sin embargo, parecía contener completamente ceros. Algo no está del todo bien aquí. ¿Por qué esto ?: volcar memoria ~ / bla.bin 0 0x7fffFFFF ¿El resultado es un archivo que contiene ceros por completo? Safari no se ejecuta en ceros, ¿verdad? ¿Asumo que debe tener algún código dentro? ;)
0

Siempre puedes activar el inicio de sesión en GDB set logging on

Luego, todo lo que hace se imprime en el archivo de registro (generalmente gdb.txt). Entonces puede comenzar a imprimir memoria usando el xcomando, y todo irá al archivo de registro, así como a la pantalla.

alesplin
fuente
0

Vea si OSX tiene un comando pmap, le mostrará la memoria asignada de cualquier proceso en ejecución. Esto generalmente se lee desde / proc en sistemas Linux. Luego, si está buscando una información en particular, puede usar el comando gdb find. Escriba help find en gdb para obtener más instrucciones.

ychaouche
fuente
-1

Lo sé, viejo hilo ...

gdb tiene un comando incorporado para volcar una imagen central del proceso / programa actual.

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

ambos comandos hacen lo mismo, el nombre del archivo es opcional, el valor predeterminado es ' core. <process_ip> '

Huh Parece que incluso hay una utilidad instalada (con gdb) llamada 'gcore' para volcar un programa actualmente en ejecución también. Por supuesto, es más fácil pausar el proceso con gdb, luego volcarlo.

¡Encontrar cosas nuevas todos los días! ... pero gdb tiene la función incorporada ... así que ya sabes ...

lornix
fuente
(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 parece sugerir que no está implementado en OS X.
Slipp D. Thompson