Как сделать дамп памяти в файл в GDB (OSX)? Нужно спасти мою работу


9

Мне нужно знать, как я могу сбросить память в Safari.app, в файл.

Я ввел gdb attach 6741 (мой PID для сафари).

Что теперь?

Я попытался найти справку в gdb в google, но не смог найти ничего, что подсказывало бы мне, что делать, даже при поиске «как сбросить память в gdb» :(

Я попробовал «help dump», он дал мне кучу команд, но ни одна из них не сработала. Самое близкое, что я пришел, было:

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

Так какой же адрес? Я не знаю? Как мне узнать адрес остановки? Я попытался найти в Google "" отсутствующий стоп-адрес "GDB", это не помогло. Я понятия не имею, как я могу получить стоп-адрес.

Я попробовал это:

(gdb) дамп памяти ~ / safaridump.bin 0 0xffffffff

Это тоже не сработало.

Я получил это:

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

Я действительно не понимаю этого. Все, что я хочу, это моя память в Safari, записанная в файл.

Это действительно важно для меня. Я провел около 2 часов, печатая свое бедное сердце в Safari, записывая действительно важную информацию. И затем глупый веб-сайт, на который я писал, не принял мой пост, потому что я так долго писал его, что я «вышел». К тому времени, как я вернулся, мой пост был потерян.

Я действительно хочу эту запись обратно. Все, что мне нужно, - это память от Safari, поэтому я могу искать по ее содержимому по нескольким ключевым словам, чтобы посмотреть, смогу ли я вернуть свои записи.

Любые идеи кто-нибудь?

По крайней мере, даже если я не получу ответ, я кое-что узнаю о GDB. Что может пригодиться в моей разработке программного обеспечения;)

Спасибо, если вы можете помочь! Это будет так много значить для меня. Я собираюсь оставить Safari и GDB работающими, пока не получу ответ. Я не позволю этому уйти, пока я не узнаю, что могу или не могу вернуть свои письма.

Если кто-то хочет дать более общие ответы о том, как восстановить потерянную работу ... это хорошо. Например, программы для поиска по всему моему жесткому диску определенных строк, которые могли быть в VRAM до того, как работа была потеряна.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html На этой странице сказано, что kill -9 не создает дамп ядра. Несмотря на то, что на этой странице написано http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , эта команда "kill -ABRT (PID HERE)" не создаст дамп ядра.

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 отзыв сочувствия - я не с оптимизмом смотрю на перспективы восстановления ваших данных, учитывая то, что вы уже пробовали. Но это законный вопрос отладки, четко написанный, с соответствующими деталями: я не думаю, что он заслуживает того, чтобы его опровергли!
Джим Льюис

НРД. Как вы находите конец кучи? Какую команду вы должны набрать, чтобы получить возвращенное вам число? Вы на самом деле знаете? Или ты просто пытаешься мне не помочь?

Это не очень хорошо работает. Я попробовал это: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Поэтому я набрал "gcore bla2.bin". И угадайте, я получу? "Неопределенная команда:" gcore ". Попробуйте" help "." Документы Apple говорят, что эта функция недоступна в некоторых системах. Я думаю, это означает, что Mac тоже? Интересно, почему в документации Apple есть общая информация о Unixy GDB, которая не определяет поведение OSX ...

developer.apple.com/mac/library/documentation/DeveloperTools/… была ли ссылка, каким-то образом она сломалась?

Немного поэкспериментировав, я обнаружил, что «dump двоичная память ~ / dump3.bin 0 0x0000FFFF» выдает некоторые данные, которые не были полностью равны нулю. Но ... здесь не было ничего ценного, и это были только первые 64 КБ. Это ... "dump bin memory ~ / dump3.bin 0 0x000fFFFF" создает файл, полностью содержащий нули. 1 МБ нулей. Понятия не имею почему. Я предполагаю (до тех пор, пока кто-то, кто знает, как использовать gdb, действительно поможет), я пересекал «неиспользуемые» области, которые даже не были выделены malloc. И из-за этого GDB выводит нули. В конце концов, Safari содержит более 1

Ответы:


6

Привет всем, я нашел, как создать coredump на OSX!

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

Там есть загружаемая программа в исходном виде. Я скачал, скомпилировал и, ура! Это сработало! Он генерировал дамп ядра почти в 1 ГБ!

Есть или нет информация там не совсем важно сейчас. Я узнал, как генерировать coredumps на OSX, что определенно может быть полезным для разработчика программного обеспечения;) Вы никогда не знаете, когда дамп ядра может пригодиться.

Я могу себе представить, что несколько лет я выполняю важную работу, и мне нужен дамп ядра, чтобы выяснить, что происходит, и это приложение "gcore" - то, что мне нужно. Даже если это окупится один раз ... это хорошо.


1
Вы также можете установить его с помощью: brew install gcore
Guido

Вы можете использовать эти инструкции здесь, чтобы быстро установить gcore. Если там написано, что «bash: brew: команда не найдена», установите homebrew по этой ссылке .
I'm_With_Stupid

gcoreвходит в macOS с 10.12 Сьерра. Он находится по адресу, /usr/bin/gcoreа также имеет справочную страницу по адресу /usr/share/man/man1/gcore.1. Это дополнительно подтверждается Homebrew , который отказывается установить gcoreв/usr/local/bin на Sierra или выше.
GDP2

1

Safari сохраняет данные формы для всех форм (если вы не отключили их или сайт не пометил форму как не подлежащую сохранению) в зашифрованном файле базы данных. Вы можете найти пароль для файла в цепочке для ключей входа в систему, и файл находится по адресу ~/Library/Safari/Form Values, так что теоретически вы можете извлечь данные из файла и посмотреть, есть ли то, что вы ввели там.

Тем не менее, у меня был взлом, и я не могу понять, какой формат файла или как он зашифрован, поэтому я не знаю, как на самом деле получить содержимое, я уверен, что кто-то делает, хотя :)


Если Safari действительно сохранил сообщение в этом файле, вы также можете получить его обратно, просто перейдя в ту же форму и напечатав первые несколько букв потерянного текста. Весь должен появиться как предложение автозаполнения.

Автозаполнение не работает для публикации контента. Это работает только для однострочных полей. Не целые статьи с сотнями строк.

Спасибо. Я сомневаюсь, что этот файл содержит содержание сообщения. Мне удалось сбросить 0 до 7ffffFFFF, создав файл 2 ГБ. Тем не менее, он, казалось, содержал только нули. Что-то здесь не совсем так. Зачем это ?: дамп памяти ~ / bla.bin 0 0x7fffFFFF Результат в файле, полностью содержащем нули? Safari не работает на нулях, не так ли? Я предполагаю, что в нем должен быть какой-то код? ;)

0

Вы всегда можете включить вход в GDB set logging on

Затем все, что вы делаете, выводится в файл журнала (обычно это gdb.txt). Таким образом, вы можете просто начать печать памяти с помощью xкоманды, и все будет идти в файл журнала, а также на экран.


0

Посмотрите, есть ли в OSX команда pmap, она покажет вам отображенную память любого запущенного процесса. Обычно это читается из / proc в системах Linux. Далее, если вы ищете конкретную информацию, вы можете использовать команду gdb find. Введите help find в gdb для получения дополнительных инструкций.


-1

Я знаю, старая тема ...

GDB имеет встроенную команду для создания образа ядра текущего процесса / программы.

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

обе команды выполняют одно и то же, имя файла является необязательным, по умолчанию используется значение « core. <process_ip> »

Ха! Похоже, что даже установлена ​​утилита (с gdb) с именем 'gcore', которая также выводит запущенную программу. Конечно, проще приостановить процесс с помощью GDB, а затем сбросить его.

Находить новые вещи каждый день! ... но GDB имеет встроенную функцию ... просто так, ты знаешь ...


(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
Слипп Д. Томпсон

2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html, по- видимому, предполагает, что он не реализован в OS X.
Слипп Д. Томпсон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.