Bagaimana cara membuang memori ke file di gdb (osx)? Perlu menyelamatkan pekerjaan saya

9

Saya perlu tahu bagaimana saya bisa membuang memori di Safari.app, ke file.

Saya sudah memasukkan gdb melampirkan 6741 (PID safari saya).

Sekarang apa?

Saya mencoba mencari bantuan di gdb di google, tetapi saya tidak dapat menemukan apa pun yang memberi tahu saya apa yang harus dilakukan, bahkan ketika mencari "cara membuang memori di gdb" :(

Saya mencoba "tolong dump", itu memberi saya banyak perintah, tetapi tidak ada yang bekerja. Yang paling dekat saya datang adalah:

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

Jadi, apa alamat berhentinya? Saya tidak tahu Bagaimana saya bisa tahu alamat berhenti? Saya mencoba mencari di Google untuk "" alamat berhenti hilang "gdb", itu tidak membantu. Saya tidak tahu bagaimana saya mendapatkan alamat stop.

Saya mencoba ini:

(gdb) dump memory ~ / safaridump.bin 0 0xffffffff

Itu juga tidak berhasil.

Saya mengerti:

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

Saya benar-benar tidak mengerti. Yang saya inginkan, adalah memori saya di Safari, ditulis ke file.

Ini sangat penting bagi saya. Saya menghabiskan sekitar 2 jam mengetik kata hati saya yang buruk di Safari, menulis beberapa informasi yang sangat penting. Dan kemudian situs web bodoh yang saya tulis, tidak menerima posting saya, karena saya telah lama menulisnya, sehingga saya telah "keluar". Pada saat saya masuk kembali, pos saya hilang.

Saya sangat ingin tulisan ini dikembalikan. Yang saya inginkan adalah memori dari Safari, jadi saya dapat mencari di dalamnya isi beberapa kata kunci untuk melihat apakah saya bisa mendapatkan kembali tulisan saya.

Ada ide?

Paling tidak, bahkan jika saya tidak mendapatkan kembali tulisan saya, saya akan belajar sesuatu tentang gdb. Yang bisa berguna dalam pengembangan perangkat lunak saya;)

Terima kasih jika Anda dapat membantu! Itu sangat berarti bagi saya. Saya akan membiarkan Safari dan gdb tetap berjalan, sampai saya mendapatkan jawaban. Saya tidak akan membiarkan ini pergi sampai saya tahu bahwa saya bisa atau tidak bisa mendapatkan kembali tulisan saya.

Jika ada yang ingin memberikan jawaban yang lebih umum tentang cara memulihkan pekerjaan yang hilang ... itu hal yang baik. Seperti program untuk mencari seluruh hard disk saya untuk string tertentu yang mungkin ada di VRAM sebelum pekerjaan hilang.

...

http://www.mail-archive.com/[email protected]/msg22978.html Halaman ini mengatakan bahwa kill -9 tidak menghasilkan dump inti. Terlepas dari apa yang dikatakan halaman ini http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , perintah ini "kill -ABRT (PID HERE)", tidak akan membuat dump inti.

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

sumber
1
+1 simpati upvote - Saya tidak optimis tentang prospek memulihkan data Anda, mengingat apa yang sudah Anda coba. Tetapi ini adalah pertanyaan debug yang sah, ditulis dengan jelas, dengan perincian terkait termasuk: Saya tidak merasa pantas untuk di-downvoted!
Jim Lewis
NSD. Bagaimana Anda menemukan ujung tumpukan? Apa perintah yang harus Anda ketik untuk mendapatkan nomor yang dikembalikan kepada Anda? Apakah kamu benar-benar tahu? Atau Anda hanya berusaha untuk tidak membantu saya?
Ini tidak bekerja dengan baik. Saya mencoba ini: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Jadi saya mengetik "gcore bla2.bin". Dan tebak saya dapatkan? "Perintah tidak terdefinisi:" gcore ". Coba" bantuan "." Dokumen Apple mengatakan bahwa fungsi ini tidak tersedia di beberapa sistem. Saya kira itu berarti Mac juga? Saya bertanya-tanya mengapa docs Apple akan memiliki info generik pada gdb unixy yang tidak menentukan perilaku OSX ini ...
developer.apple.com/mac/library/documentation/DeveloperTools/… apakah tautannya, entah bagaimana rusak?
Setelah sedikit percobaan, saya menemukan ini: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" menghasilkan beberapa data yang tidak seluruhnya nol. Tapi ... tidak ada yang berharga di sini dan itu hanya 64KB pertama. Ini ... "dump binary memory ~ / dump3.bin 0 0x000fFFFF" menghasilkan file yang seluruhnya mengandung nol. 1MB nol. Saya tidak tahu kenapa. Dugaan saya (sampai seseorang yang tahu cara menggunakan gdb benar-benar membantu), adalah bahwa saya telah melintasi wilayah "tidak digunakan", yang bahkan tidak dialokasikan oleh malloc. Dan karena ini, gdb menghasilkan nol. Toh, Safari mengandung lebih dari 1MB data;)

Jawaban:

6

Hai semuanya, saya menemukan cara membuat coredump di OSX!

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

Ada program yang dapat diunduh di sana, dalam bentuk sumber. Saya mengunduhnya, mengompilasinya, dan, hore! Berhasil! Ini menghasilkan dump inti hampir 1GB!

Apakah informasi itu ada di sana atau tidak, tidak penting sekarang. Saya belajar cara membuat coredumps di OSX, yang pasti bisa menjadi keterampilan yang berguna sebagai pengembang perangkat lunak;) Anda tidak pernah tahu kapan sebuah dump inti bisa berguna.

Saya hanya dapat membayangkan beberapa tahun waktu saya melakukan pekerjaan yang penting, dan saya membutuhkan dump inti untuk mencari tahu apa yang terjadi, dan aplikasi "gcore" ini adalah yang saya butuhkan. Bahkan jika itu terbayar sekali ... ini adalah hal yang baik.

boytheo
sumber
1
Anda juga dapat menginstalnya dengan: brew install gcore
Guido
Anda dapat menggunakan instruksi ini di sini untuk menginstal gcore dengan cepat. Jika dikatakan bahwa "bash: brew: command not found" maka instal homebrew menggunakan tautan ini .
I'm_With_Stupid
gcoretermasuk dalam macOS sejak 10.12 Sierra. Itu terletak di /usr/bin/gcoredan juga memiliki halaman manual di /usr/share/man/man1/gcore.1. Ini lebih lanjut dikonfirmasi oleh Homebrew yang menolak untuk menginstal gcoreke/usr/local/bin Sierra atau lebih tinggi.
GDP2
1

Safari menyimpan data formulir untuk semua formulir (kecuali jika Anda mematikannya, atau situs menandai formulir sebagai tidak dapat disimpan), dalam file database terenkripsi. Anda dapat menemukan kata sandi untuk file di gantungan kunci login Anda, dan file berada di ~/Library/Safari/Form Values, jadi secara teoritis, Anda dapat mengekstrak data dari file tersebut, dan melihat apakah yang Anda ketikkan ada di sana.

Namun, saya telah melakukan peretasan, dan saya tidak dapat mengetahui format file itu, atau bagaimana cara dienkripsi, jadi saya tidak tahu bagaimana cara mendapatkan isinya, saya yakin seseorang melakukannya :)

James
sumber
Jika Safari memang menyimpan posting dalam file ini, Anda juga bisa mendapatkannya kembali hanya dengan pergi ke formulir yang sama dan mengetik beberapa huruf pertama dari teks yang hilang. Seluruhnya akan muncul sebagai saran pelengkapan otomatis.
Masalah pelengkapan otomatis tidak berfungsi untuk konten posting. Ini hanya berfungsi untuk bidang baris tunggal. Tidak seluruh artikel dengan ratusan baris.
Terima kasih. Saya ragu file ini mengandung konten posting. Saya berhasil membuang 0 hingga 7ffffFFFF, membuat file 2GB. Namun, tampaknya mengandung nol sepenuhnya. Ada sesuatu yang tidak beres di sini. Mengapa ini ?: dump memory ~ / bla.bin 0 0x7fffFFFF Menghasilkan file yang seluruhnya mengandung nol? Safari tidak berjalan di nol bukan? Saya berasumsi pasti ada beberapa kode di dalamnya? ;)
0

Anda selalu dapat mengaktifkan logon di GDB set logging on

Kemudian, semua yang Anda lakukan dicetak ke file log (biasanya gdb.txt). Jadi Anda bisa mulai mencetak memori menggunakan xperintah, dan semuanya akan masuk ke file log serta layar.

alesplin
sumber
0

Lihat apakah OSX memiliki perintah pmap, ia akan menunjukkan kepada Anda memori yang dipetakan dari setiap proses yang berjalan. Ini biasanya dibaca dari / proc di sistem linux. Selanjutnya, jika Anda mencari informasi tertentu, Anda dapat menggunakan perintah gdb find. Ketik bantuan temukan di gdb untuk instruksi lebih lanjut.

ychaouche
sumber
-1

Saya tahu, utas lama ...

gdb memiliki perintah bawaan untuk membuang gambar inti dari proses / program saat ini.

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

kedua perintah melakukan hal yang sama, nama file adalah opsional, standarnya adalah ' inti. <process_ip> '

Hah! Sepertinya bahkan ada utilitas yang diinstal (dengan gdb) bernama 'gcore' untuk membuang program yang sedang berjalan juga. Tentu saja, lebih mudah menghentikan proses dengan gdb, lalu membuangnya.

Menemukan hal-hal baru setiap hari! ... tapi gdb memiliki fungsi built-in ... begini saja ya tahu ..

lornix
sumber
(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 tampaknya menyarankan bahwa itu tidak diterapkan pada OS X.
Slipp D. Thompson