วิธีการถ่ายโอนข้อมูลหน่วยความจำไปยังไฟล์ใน gdb (osx)? จำเป็นต้องช่วยชีวิตงานของฉัน


9

ฉันต้องรู้ว่าฉันสามารถถ่ายโอนข้อมูลหน่วยความจำใน Safari.app ไปยังไฟล์ได้อย่างไร

ฉันป้อน gdb แนบ 6741 (PID ของฉันซาฟารี)

ตอนนี้คืออะไร

ฉันพยายามค้นหาความช่วยเหลือเกี่ยวกับ gdb บน google แต่ฉันไม่พบสิ่งใดที่บอกฉันว่าต้องทำอย่างไรแม้จะค้นหา "วิธีการถ่ายโอนข้อมูลหน่วยความจำใน gdb" :(

ฉันลอง "ช่วยถ่ายโอนข้อมูล" มันทำให้ฉันมีคำสั่งมากมาย แต่ก็ไม่มีใครทำงานได้ ฉันมาใกล้ที่สุดคือ:

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

ดังนั้นที่อยู่หยุดคืออะไร? ฉันไม่รู้ ฉันจะรู้ที่อยู่หยุดได้อย่างไร ฉันลองค้นหาคำว่า "" ที่อยู่หยุดที่ขาดหายไป "gdb" ใน google แต่ก็ไม่ได้ช่วยอะไร ฉันไม่รู้ว่าจะหาที่อยู่หยุดได้อย่างไร

ฉันลองสิ่งนี้:

(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 ไม่สร้าง core dump แม้จะมีสิ่งที่หน้านี้บอกว่าhttp://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPSคำสั่งนี้ "kill -ABRT (PID ที่นี่)" จะไม่สร้าง core dump

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 - ฉันไม่ได้มองโลกในแง่ดีเกี่ยวกับโอกาสในการกู้คืนข้อมูลของคุณเนื่องจากสิ่งที่คุณได้ลองไปแล้ว แต่เป็นคำถามการแก้จุดบกพร่องที่ถูกต้องตามกฎหมายเขียนชัดเจนโดยมีรายละเอียดที่เกี่ยวข้องรวมถึง: ฉันไม่คิดว่ามันควรจะเป็น downvoted!
Jim Lewis

NSD คุณจะพบจุดจบของกองได้อย่างไร คำสั่งที่คุณต้องพิมพ์เพื่อให้ได้ตัวเลขที่ส่งคืนให้คุณคืออะไร? คุณรู้จริงหรือ หรือคุณแค่พยายามไม่ช่วยฉัน

มันใช้งานไม่ค่อยดี ฉันลองทำสิ่งนี้: < developer.apple.com/mac/library/documentation/DeveloperTools/ … > ดังนั้นฉันจึงพิมพ์ "gcore bla2.bin" และฉันจะเดาได้อย่างไร "คำสั่งที่ไม่ได้กำหนด:" gcore "ลอง" help " เอกสารของ Apple บอกว่าฟังก์ชันนี้ไม่มีในบางระบบ ฉันเดาว่านั่นหมายถึง Macs ด้วยใช่ไหม ผมสงสัยว่าทำไมเอกสารของ Apple จะมีข้อมูลทั่วไปเกี่ยวกับ gdb unixy ที่ไม่ระบุลักษณะการทำงานของ OSX ...

developer.apple.com/mac/library/documentation/DeveloperTools/?hl=thเป็นลิงก์ แต่อย่างใดมันก็พัง

หลังจากการทดลองอีกเล็กน้อยฉันพบสิ่งนี้: "dump binary memory ~ / dump3.bin 0 0x0000FFFF" สร้างข้อมูลบางส่วนที่ไม่ใช่ศูนย์ทั้งหมด แต่ ... ไม่มีอะไรที่มีคุณค่าในที่นี่และมันเป็นเพียง 64KB แรก นี่ ... "การถ่ายโอนข้อมูลหน่วยความจำไบนารี ~ / dump3.bin 0 0x000fFFFF" สร้างไฟล์ที่มีศูนย์ทั้งหมด ศูนย์ 1MB ฉันมีความคิดว่าทำไมไม่มี. ฉันเดา (จนกว่าจะมีคนที่รู้วิธีใช้ gdb ช่วยจริง ๆ ) คือฉันข้ามเขต "ไม่ได้ใช้" ซึ่งไม่ได้จัดสรรโดย malloc และด้วยเหตุนี้จึงทำให้ gdb แสดงผลเป็นศูนย์ หลังจากที่ทุกซาฟารีมีมากขึ้นกว่า 1MB ของข้อมูล;)

คำตอบ:


6

สวัสดีทุกคนฉันพบวิธีสร้าง coredump บน OSX!

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

มีโปรแกรมที่สามารถดาวน์โหลดได้ที่นั่นในรูปแบบต้นฉบับ ฉันดาวน์โหลดมารวบรวมมันและไชโย! มันได้ผล! มันสร้างการถ่ายโอนข้อมูลหลักเกือบ 1GB!

ไม่ว่าข้อมูลนั้นจะมีอยู่หรือไม่ก็ตาม ฉันเรียนรู้วิธีสร้าง coredumps บน OSX ซึ่งแน่นอนว่าอาจเป็นทักษะที่ใช้งานง่ายในฐานะผู้พัฒนาซอฟต์แวร์;) คุณไม่เคยรู้เลยว่าเมื่อใดที่การถ่ายโอนข้อมูลหลักอาจมีประโยชน์

ฉันสามารถจินตนาการถึงเวลาไม่กี่ปีที่ฉันทำงานที่สำคัญและฉันต้องมีการถ่ายโอนข้อมูลหลักเพื่อหาว่าเกิดอะไรขึ้นและแอพ "gcore" นี้เป็นสิ่งที่ฉันต้องการ แม้ว่ามันจะจ่ายครั้งเดียว ... นี่เป็นสิ่งที่ดี


1
นอกจากนี้คุณยังสามารถติดตั้งได้ด้วย: brew install gcore
Guido

คุณสามารถใช้คำแนะนำเหล่านี้ได้ที่นี่เพื่อติดตั้ง gcore อย่างรวดเร็ว ถ้ามันบอกว่า "bash: brew: ไม่พบคำสั่ง" ให้ติดตั้ง homebrew โดยใช้ลิงค์นี้
ฉัน _With_Stupid

gcoreรวมอยู่ใน macOSตั้งแต่ 10.12 Sierra มันอยู่ที่และยังมีหน้าคนที่/usr/bin/gcore /usr/share/man/man1/gcore.1นี่คือการยืนยันต่อไปโดย Homebrew ซึ่งปฏิเสธที่จะติดตั้งgcoreไป/usr/local/binในเซียร์ราหรือสูงกว่า
GDP2

1

Safari บันทึกข้อมูลแบบฟอร์มสำหรับทุกรูปแบบ (เว้นแต่ว่าคุณจะปิดไว้หรือเว็บไซต์ทำเครื่องหมายรูปแบบว่าไม่ถูกบันทึก) ในไฟล์ฐานข้อมูลที่เข้ารหัส คุณสามารถค้นหารหัสผ่านสำหรับไฟล์ในพวงกุญแจเข้าสู่ระบบของคุณและไฟล์อยู่ที่ใน~/Library/Safari/Form Valuesทางทฤษฎีคุณสามารถแยกข้อมูลจากไฟล์และดูว่าสิ่งที่คุณพิมพ์อยู่ในนั้นหรือไม่

อย่างไรก็ตามฉันมีแฮ็คและฉันไม่สามารถหารูปแบบของไฟล์หรือวิธีการเข้ารหัสดังนั้นฉันจึงไม่รู้วิธีที่จะได้รับเนื้อหาจริง ๆ ฉันแน่ใจว่ามีคนทำ :)


หาก Safari บันทึกโพสต์ในไฟล์นี้แล้วคุณสามารถเรียกคืนได้โดยไปที่ฟอร์มเดียวกันและพิมพ์ตัวอักษรสองสามตัวแรกของข้อความที่หายไป ทั้งหมดควรปรากฏขึ้นเป็นคำแนะนำการเติมข้อความอัตโนมัติ

สิ่งที่ทำให้สมบูรณ์อัตโนมัติไม่สามารถใช้งานได้กับเนื้อหาโพสต์ ใช้งานได้กับฟิลด์บรรทัดเดียวเท่านั้น ไม่ใช่บทความทั้งหมดที่มีหลายร้อยบรรทัด

ขอบคุณ ฉันสงสัยว่าไฟล์นี้มีเนื้อหาโพสต์ ฉันจัดการการถ่ายโอนข้อมูล 0 ถึง 7ffffFFFF สร้างไฟล์ 2GB อย่างไรก็ตามดูเหมือนจะมีศูนย์ทั้งหมด มีบางอย่างไม่ถูกต้องที่นี่ ทำไมถึงเป็นเช่นนั้น: หน่วยความจำดัมพ์ ~ / bla.bin 0 0x7fffFFFF ส่งผลให้ไฟล์มีค่าศูนย์ทั้งหมดหรือไม่ Safari ไม่ทำงานบนเลขศูนย์ใช่หรือไม่ ฉันคิดว่ามันต้องมีโค้ดอยู่ข้างในบ้าง? ;)

0

คุณสามารถเปิดการเข้าสู่ระบบใน GDB ได้ตลอดเวลา set logging on

จากนั้นทุกสิ่งที่คุณทำจะถูกพิมพ์ไปยังไฟล์บันทึก (โดยปกติคือ gdb.txt) ดังนั้นคุณสามารถเริ่มพิมพ์หน่วยความจำโดยใช้xคำสั่งและทุกอย่างจะไปที่ไฟล์บันทึกเช่นเดียวกับหน้าจอ


0

ดูว่า OSX มีคำสั่ง pmap หรือไม่นั้นจะแสดงหน่วยความจำที่แมปของกระบวนการที่กำลังทำงานอยู่ โดยปกติจะอ่านจาก / proc ในระบบ linux ถัดไปหากคุณกำลังค้นหาข้อมูลเฉพาะคุณสามารถใช้คำสั่ง gdb 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".
Slipp D. Thompson

2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.htmlดูเหมือนว่าจะไม่แนะนำให้ใช้บน OS X
Slipp D. Thompson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.