如何在 gdb (osx) 中将内存转储到文件中?需要拯救我的工作

如何在 gdb (osx) 中将内存转储到文件中?需要拯救我的工作

我需要知道如何将 Safari.app 中的内存转储到文件中。

我已经输入 gdb attachment 6741 (我的 safari PID)。

怎么办?

我尝试在 google 上搜索有关 gdb 的帮助,但是找不到任何告诉我该怎么做的内容,即使搜索“如何在 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/[电子邮件保护]/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 ..

答案1

我找到了如何在 OSX 上生成核心转储的方法!

关联

那里有一个可下载的程序,源代码形式。我下载了它,编译了它,然后,哇哦!它成功了!它生成了近 1GB 的核心转储!

现在,这些信息是否存在并不重要。我学会了如何在 OSX 上生成核心转储,这对软件开发人员来说绝对是一项有用的技能 ;) 你永远不知道核心转储何时会派上用场。

我可以想象几年后我从事一项重要的工作,我需要一个核心转储来弄清楚发生了什么,而这个“gcore”应用程序就是我所需要的。即使它只带来一次回报……这也是一件好事。

答案2

Safari 将所有表单的表单数据(除非您将其关闭,或者网站将表单标记为不可保存)保存在加密数据库文件中。您可以在登录钥匙串中找到该文件的密码,该文件位于 ,因此~/Library/Safari/Form Values理论上,您可以从文件中提取数据,并查看您输入的内容是否在其中。

但是,我被黑客入侵了,我无法弄清楚该文件是什么格式,或者它是如何加密的,所以我不知道如何真正获取其内容,但我相信有人知道:)

答案3

你可以随时在 GDB 中打开日志记录set logging on

然后,您所做的一切都会打印到日志文件(通常是 gdb.txt)。因此,您只需使用该x命令开始打印内存,所有内容都会进入日志文件和屏幕。

答案4

我知道,老帖子……

gdb 有一个内置命令来转储当前进程/程序的核心映像。

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

两个命令的作用相同,文件名是可选的,默认为'核心.<进程 ip>

嗯!看起来甚至安装了一个名为“gcore”的实用程序(带有 gdb),用于转储当前正在运行的程序。当然,使用 gdb 暂停进程然后转储它更容易。

每天都会发现新的东西!...但是 gdb 有内置的功能...你知道的..

相关内容