メモリをgdb(osx)のファイルにダンプする方法は?私の仕事を救う必要がある


9

Safari.appのメモリをファイルにダンプする方法を知る必要があります。

gdb attach 6741(私のサファリPID)を入力しました。

それで?

Googleでgdbのヘルプを検索してみましたが、「gdbにメモリをダンプする方法」を検索しても、何をすべきかを教えてくれるものが見つかりませんでした:(

「ヘルプダンプ」を試しましたが、たくさんのコマンドが得られましたが、どれも機能しませんでした。私が来た最も近いものは:

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

それで、ストップアドレスは何ですか?知りません?停車地を知るにはどうすればよいですか?グーグルで「停止アドレスがありません」の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からのメモリだけなので、その内容をいくつかのキーワードで検索して、書面を取り戻すことができるかどうかを確認できます。

誰かアイデアはありますか?

少なくとも、返事がなくても、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同情賛成-あなたがすでに試みたことを考えると、私はあなたのデータを回復する見込みについて楽観的ではありません。しかし、それは正当なデバッグの質問であり、明確に記述されており、関連する詳細が含まれています。
ジム・ルイス

NSD。どうやってヒープの終わりを見つけるのですか?番号を返すために入力する必要があるコマンドは何ですか?知ってる?それとも私を助けようとしないのですか?

これはうまく機能していません。私はこれを試しました:< developer.apple.com/mac/library/documentation/DeveloperTools/… >そこで、「gcore bla2.bin」と入力しました。そして、私は得ますか?"未定義のコマンド:" gcore "。" help "を試してください。" Appleのドキュメントによると、この機能は一部のシステムでは使用できないとのことです。それもマックだと思う?Appleのドキュメントは、OSXの動作を指定しないunixy GDB上の一般的な情報を持っているでしょう、なぜ私が...不思議

developer.apple.com/mac/library/documentation/DeveloperTools/…リンクでしたが、どういうわけか壊れましたか?

もう少し実験したところ、「ダンプバイナリメモリ〜/ dump3.bin 0 0x0000FFFF」が完全にゼロではないデータを生成したことがわかりました。しかし...ここには何も価値がなく、最初の64KBしかありませんでした。これは...「バイナリメモリーをダンプする〜/ dump3.bin 0 0x000fFFFF」は、完全にゼロを含むファイルを生成します。1MBのゼロ。なぜかわかりません。私の推測(gdbの使い方を知っている人が実際に役立つまで)は、mallocによって割り当てられていない「未使用」の領域を超えたと思います。このため、gdbはゼロを出力します。結局のところ、Safariには1MBを超えるデータが含まれています;)

回答:


6

みなさん、OSXでコアダンプを生成する方法を見つけました!

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

ソース形式でダウンロード可能なプログラムがあります。私はそれをダウンロードしてコンパイルし、そしてフーレイ!動いた!ほぼ1GBのコアダンプが生成されました。

情報がそこにあるかどうかは今のところ重要ではありません。私はOSXでコアダンプを生成する方法を学びました。これは、ソフトウェア開発者としては確かに便利なスキルかもしれません;)いつコアダンプが役立つかわかりません。

私が重要な仕事をしている数年の時間を想像することができます、そして何が起こっているのかを理解するためにコアダンプが必要です、そしてこの「gcore」アプリは私が必要とするものです。一応報われても……これはいいことです。


1
次のコマンドでもインストールできます:brew install gcore
Guido

あなたはこれらの命令を使用することができ、ここですぐのgcoreをインストールします。「bash:brew:コマンドが見つかりません」と表示されている場合は、このリンクを使用し homebrewをインストールします。
I'm_With_Stupid

gcore10.12 Sierra以降、macOSに含まれています。にあり/usr/bin/gcore、manページもにあります/usr/share/man/man1/gcore.1。これは、Sierra以上へのインストールgcoreを拒否する/usr/local/bin Homebrewによってさらに確認されています。
GDP2

1

Safariは、すべてのフォームのフォームデータを(オフにしていないか、サイトがフォームを保存しないようにマークしていない限り)、暗号化されたデータベースファイルに保存します。ログインキーチェーンでファイルのパスワードを見つけることができます。ファイルはに~/Library/Safari/Form Valuesあるため、理論的にはファイルからデータを抽出し、入力したものがそこにあるかどうかを確認できます。

しかし、私はハックを経験しており、ファイルの形式や暗号化の方法を理解することができないため、実際にコンテンツを取得する方法がわかりません。


Safariが投稿をこのファイルに保存した場合は、同じフォームに移動して、失われたテキストの最初の数文字を入力するだけで、投稿を元に戻すこともできます。全体がオートコンプリートの候補としてポップアップ表示されます。

オートコンプリートは投稿コンテンツでは機能しません。単一行フィールドでのみ機能します。数百行の記事全体ではありません。

ありがとう。このファイルに投稿内容が含まれているとは思いません。0を7ffffFFFFにダンプして、2GBのファイルを作成しました。ただし、完全にゼロが含まれているようです。ここで何かが正しくありません。これはなぜでしょうか?:メモリをダンプします〜/ bla.bin 0 0x7fffFFFF結果として完全にゼロを含むファイルになりますか?サファリはゼロで実行されていませんか?中にコードが必要だと思いますか?;)

0

あなたは常にGDBでロギングをオンにすることができます set logging on

次に、実行したすべての内容がログファイル(通常はgdb.txt)に出力されます。したがって、xコマンドを使用してメモリの印刷を開始するだけで、すべてがログファイルと画面に移動します。


0

OSXにpmapコマンドがあるかどうかを確認してください。実行中のプロセスのマップされたメモリが表示されます。これは通常、Linuxシステムの/ procから読み取られます。次に、特定の情報を検索する場合は、gdb findコマンドを使用できます。詳細については、gdbでhelp findと入力してください。


-1

わかった、古い糸...

gdbには、現在のプロセス/プログラムのコアイメージをダンプする組み込みコマンドがあります。

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

両方のコマンドは同じことを行い、ファイル名はオプションであり、デフォルトは ' core。<process_ip> ' です。

はぁ!現在実行中のプログラムをダンプするために、「gcore」という名前のユーティリティも(gdbとともに)インストールされているようです。もちろん、gdbでプロセスを一時停止してからダンプする方が簡単です。

毎日新しいものを見つける!...しかし、gdbには関数が組み込まれています...そうですね。


(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
Slipp D. Thompson、2013

2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.htmlはそれはOS X上で実装されていないことを示唆しているようだ
Slipp D.トンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.