Làm cách nào để kết xuất bộ nhớ vào một tệp trong gdb (osx)? Cần cứu công việc của tôi


9

Tôi cần biết làm thế nào tôi có thể kết xuất bộ nhớ trong Safari.app vào một tệp.

Tôi đã nhập gdb đính kèm 6741 (mã safari của tôi).

Giờ thì sao?

Tôi đã thử tìm kiếm trợ giúp trên gdb trên google, nhưng tôi không thể tìm thấy bất cứ điều gì cho tôi biết phải làm gì, ngay cả khi tìm kiếm "cách kết xuất bộ nhớ trong gdb" :(

Tôi đã thử "trợ giúp", nó đưa cho tôi một loạt các lệnh, nhưng không ai trong số chúng hoạt động. Gần nhất tôi đến là:

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

Vì vậy, địa chỉ dừng là gì? Tôi không biết? Làm thế nào tôi có nghĩa là để biết địa chỉ dừng? Tôi đã thử tìm kiếm trên google cho "" thiếu địa chỉ dừng "gdb", nó không có ích. Tôi không biết làm thế nào tôi có được địa chỉ dừng.

Tôi đã thử điều này:

(gdb) kết xuất bộ nhớ ~ / safaridump.bin 0 0xffffffff

Điều đó cũng không hiệu quả.

Tôi hiểu rồi:

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

Tôi thực sự không có được điều này. Tất cả những gì tôi muốn, là bộ nhớ của tôi trong Safari, được ghi vào một tệp.

Nó thực sự quan trọng đối với tôi. Tôi đã dành khoảng 2 giờ để gõ trái tim tội nghiệp của mình vào Safari, viết một số thông tin thực sự quan trọng. Và sau đó trang web ngu ngốc mà tôi đã viết, đã không chấp nhận bài viết của tôi, bởi vì tôi đã mất quá lâu để viết nó, rằng tôi đã "đăng xuất". Khi tôi đăng nhập lại, bài viết của tôi đã bị mất.

Tôi thực sự muốn viết lại này. Tất cả những gì tôi muốn là bộ nhớ từ Safari, vì vậy tôi có thể tìm kiếm nội dung của nó cho một vài từ khóa để xem liệu tôi có thể lấy lại được văn bản của mình không.

Có ai có ý kiến ​​gì không?

Ít nhất, ngay cả khi tôi không lấy lại được bài viết của mình, tôi sẽ học được điều gì đó về gdb. Điều này có thể có ích trong việc phát triển phần mềm của tôi;)

Cảm ơn nếu bạn có thể giúp! Nó có ý nghĩa rất lớn đối với tôi. Tôi sẽ để Safari và gdb chạy, cho đến khi tôi nhận được câu trả lời. Tôi sẽ không để điều này xảy ra cho đến khi tôi phát hiện ra rằng tôi có thể hoặc không thể lấy lại được văn bản của mình.

Nếu bất cứ ai muốn đưa ra câu trả lời chung chung hơn về cách phục hồi công việc bị mất ... đó là một điều tốt. Chẳng hạn như các chương trình tìm kiếm toàn bộ đĩa cứng của tôi để tìm các chuỗi cụ thể có thể có trong VRAM trước khi công việc bị mất.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html Trang này nói rằng kill -9 không tạo ra kết xuất lõi. Bất chấp những gì trang này nói là http://developer.apple.com/mac/l Library / technotes / tn2004 / tn2124.html # SECECOREDUMPS, lệnh này "kill -ABRT (PID TẠI ĐÂY)", sẽ không tạo ra kết xuất lõi.

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 upvote thông cảm - Tôi không lạc quan về triển vọng khôi phục dữ liệu của bạn, với những gì bạn đã thử. Nhưng đó là một câu hỏi gỡ lỗi hợp pháp, được viết rõ ràng, với các chi tiết thích hợp bao gồm: Tôi không nghĩ rằng nó đáng bị đánh giá thấp!
Jim Lewis

NSD. Làm thế nào để bạn tìm thấy kết thúc của đống? Lệnh bạn phải gõ để lấy số trả về cho bạn là gì? Bạn có thực sự biết? Hay bạn chỉ đang cố gắng không giúp tôi?

Điều này không làm việc rất tốt. Tôi đã thử cách này: < developer.apple.com/mac/l Library / documentation / DeveloperTools / Fiêu> Vì vậy, tôi đã gõ "gcore bla2.bin". Và đoán xem tôi có được không? "Lệnh không xác định:" gcore ". Hãy thử" trợ giúp "." Các tài liệu của Apple nói rằng chức năng này không khả dụng trên một số hệ thống. Tôi đoán điều đó có nghĩa là máy Mac? Tôi tự hỏi tại sao các tài liệu của Apple sẽ có thông tin chung về gdb unixy không chỉ định hành vi của OSX ...

developer.apple.com/mac/l Library / documentation / DevelopmentTools /, là liên kết, bằng cách nào đó nó đã bị hỏng?

Sau khi thử nghiệm thêm một chút, tôi thấy điều này: "kết xuất bộ nhớ nhị phân ~ / dump3.bin 0 0x0000FFFF" đã tạo ra một số dữ liệu không hoàn toàn là số không. Nhưng ... không có gì có giá trị ở đây và nó chỉ là 64KB đầu tiên. Điều này ... "kết xuất bộ nhớ nhị phân ~ / dump3.bin 0 0x000fFFFF" đã tạo ra một tệp hoàn toàn chứa các số không. 1 MB số không. Tôi không biết tại sao. Tôi đoán (cho đến khi ai đó biết cách sử dụng gdb thực sự có ích), là tôi đã vượt qua các vùng "không sử dụng", thậm chí không được phân bổ bởi malloc. Và vì điều này, gdb xuất ra số không. Rốt cuộc, Safari chứa hơn 1 MB dữ liệu;)

Câu trả lời:


6

Chào mọi người, tôi đã tìm ra cách tạo ra một coredump trên OSX!

http://osxbook.com/book/bonus/ch CHƯƠNG8 / core /

Có một chương trình có thể tải xuống ở đó, ở dạng nguồn. Tôi đã tải về nó, biên dịch nó, và, hoan hô! Nó đã làm việc! Nó tạo ra một bãi chứa gần 1GB lõi!

Cho dù thông tin có ở đó hay không không quan trọng bây giờ. Tôi đã học được cách tạo ra các coredumps trên OSX, đây chắc chắn có thể là một kỹ năng tiện dụng như một nhà phát triển phần mềm;) Bạn không bao giờ biết khi nào một kết xuất lõi có thể có ích.

Tôi chỉ có thể tưởng tượng một vài năm tôi đang làm một công việc quan trọng và tôi cần một bãi rác cốt lõi để tìm hiểu chuyện gì đang xảy ra, và ứng dụng "gcore" này là thứ tôi cần. Ngay cả khi nó được đền đáp một lần ... đây là một điều tốt.


1
Bạn cũng có thể cài đặt nó với: brew install gcore
Guido

Bạn có thể sử dụng các hướng dẫn ở đây để nhanh chóng cài đặt gcore. Nếu nó nói rằng "bash: brew: lệnh không tìm thấy" thì hãy cài đặt homebrew bằng liên kết này .
Tôi_With_Stool

gcoređược bao gồm trong macOS kể từ 10.12 Sierra. Nó nằm ở /usr/bin/gcorevà cũng có một trang người đàn ông tại /usr/share/man/man1/gcore.1. Đây là tiếp tục khẳng định bởi Homebrew mà từ chối cài đặt gcoređể/usr/local/bin trên Sierra hoặc cao hơn.
GDP2

1

Safari lưu dữ liệu biểu mẫu cho tất cả các biểu mẫu (trừ khi bạn tắt nó hoặc trang web đánh dấu biểu mẫu là không thể lưu), trong tệp cơ sở dữ liệu được mã hóa. Bạn có thể tìm thấy mật khẩu cho tệp trong móc khóa đăng nhập của mình và tệp nằm ở đó ~/Library/Safari/Form Values, theo lý thuyết, bạn có thể trích xuất dữ liệu từ tệp và xem liệu những gì bạn đã nhập có trong đó không.

Tuy nhiên, tôi đã bị hack và tôi không thể tìm ra định dạng của tệp hoặc cách mã hóa, vì vậy tôi không biết làm thế nào để thực sự có được nội dung, tôi chắc chắn có ai đó làm vậy :)


Nếu Safari đã lưu bài đăng trong tệp này, bạn cũng có thể lấy lại nó đơn giản bằng cách vào cùng một biểu mẫu và nhập một vài chữ cái đầu tiên của văn bản bị mất. Toàn bộ sẽ bật lên như đề xuất tự động hoàn thành.

Điều tự động hoàn thành không hoạt động cho nội dung bài. Nó chỉ hoạt động cho các trường dòng đơn. Không phải toàn bộ bài viết với hàng trăm dòng.

Cảm ơn. Tôi nghi ngờ tập tin này có chứa nội dung bài. Tôi đã quản lý để chuyển 0 đến 7ffffFFFF, tạo một tệp 2GB. Tuy nhiên, nó dường như chứa hoàn toàn số không. Một cái gì đó không hoàn toàn đúng ở đây. Tại sao điều này?: Kết xuất bộ nhớ ~ / bla.bin 0 0x7fffFFFF Kết quả trong một tệp hoàn toàn chứa số không? Safari không chạy trên số không? Tôi đang giả sử nó phải có một số mã bên trong nó? ;)

0

Bạn luôn có thể bật đăng nhập trong GDB set logging on

Sau đó, mọi thứ bạn làm được in vào tệp nhật ký (thường là gdb.txt). Vì vậy, bạn có thể chỉ cần bắt đầu in bộ nhớ bằng xlệnh và mọi thứ sẽ chuyển đến tệp nhật ký cũng như màn hình.


0

Xem nếu OSX có lệnh pmap, nó sẽ hiển thị cho bạn bộ nhớ được ánh xạ của bất kỳ quá trình đang chạy nào. Điều này thường được đọc từ / Proc trong các hệ thống linux. Tiếp theo, nếu bạn đang tìm kiếm một thông tin cụ thể, bạn có thể sử dụng lệnh gdb find. Nhập trợ giúp tìm trong gdb để biết thêm hướng dẫn.


-1

Tôi biết, chủ đề cũ ...

gdb có một lệnh dựng sẵn để kết xuất một hình ảnh cốt lõi của quy trình / chương trình hiện tại.

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

cả hai lệnh đều làm như nhau, tên tệp là tùy chọn, mặc định là ' core. <process_ip> '

Huh! có vẻ như thậm chí còn có một tiện ích được cài đặt (với gdb) có tên là 'gcore' để kết xuất một chương trình hiện đang chạy. Tất nhiên, dễ dàng hơn để tạm dừng quá trình với gdb, sau đó kết xuất nó.

Tìm kiếm những điều mới mỗi ngày! ... nhưng gdb có chức năng tích hợp sẵn ... chỉ để bạn biết ..


(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/onlinesocs/gdb/Core-File-Generation.html dường như đề xuất rằng nó không được triển khai trên OS X.
Slipp D. Thompson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.