gdb (OSX)의 파일에 메모리를 덤프하는 방법은 무엇입니까? 내 일을 구출해야


9

Safari.app에서 메모리를 파일로 덤프하는 방법을 알아야합니다.

gdb attach 6741 (사파리 PID)을 입력했습니다.

이제 뭐?

Google에서 gdb에 대한 도움말을 검색하려고했지만 "gdb에서 메모리를 덤프하는 방법"을 검색 할 때에도 수행 할 작업에 대한 정보를 찾을 수 없었습니다.

"도움말 덤프"를 시도했는데 많은 명령을 내렸지 만 그중 아무것도 작동하지 않았습니다. 내가 온 가장 가까운 것은 :

(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의 메모리뿐이므로 내용을 검색하여 몇 가지 키워드를 검색하여 글을 다시 가져올 수 있는지 확인할 수 있습니다.

어떤 아이디어가 있습니까?

최소한 글을 다시받지 않아도 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 동정 공감-나는 당신이 이미 시도한 것을 감안할 때 데이터 복구 가능성에 대해 낙관하지 않습니다. 그러나 합법적 인 디버깅 질문이며 명확하게 작성되었으며 관련 세부 정보가 포함되어 있습니다.
— Jim Lewis

NSD. 힙의 끝을 어떻게 찾습니까? 숫자를 돌려 받으려면 어떤 명령을 입력해야합니까? 실제로 아십니까? 아니면 그냥 도와 주려고 노력하고 있습니까?

이것은 잘 작동하지 않습니다. 나는 이것을 시도했다 : < developer.apple.com/mac/library/documentation/DeveloperTools/… > 그래서 나는 "gcore bla2.bin"을 입력했다. 내가 알 겠어? "정의되지 않은 명령 :"gcore "."도움말 "을 시도하십시오." 애플의 문서에 따르면 일부 시스템에서는이 기능을 사용할 수 없습니다. 나도 맥을 의미하는 것 같아? 애플의 문서가 왜 OSX의 행동을 명시하지 않는 유닉스 GDB에 대한 일반적인 정보를 가지고 있는지 궁금하다.

developer.apple.com/mac/library/documentation/DeveloperTools/… 링크가 어떻게되어 끊어 졌습니까?

좀 더 실험을 한 결과, "dump binary memory ~ / dump3.bin 0 0x0000FFFF"는 완전히 0이 아닌 일부 데이터를 생성했습니다. 그러나 ... 여기에는 가치가 없었으며 처음 64KB였습니다. 이 ... "덤프 이진 메모리 ~ / dump3.bin 0 0x000fFFFF"는 완전히 0을 포함하는 파일을 생성했습니다. 1MB 0입니다. 왜 그런지 모르겠습니다. 내 추측은 (gdb를 사용하는 방법을 아는 사람이 실제로 도움이 될 때까지) malloc에 ​​의해 할당되지 않은 "사용되지 않은"지역을 건너 갔다는 것입니다. 그리고이 때문에 gdb는 0을 출력합니다. 결국, Safari는 더 많은 데이터 1MB의 이상 포함)

답변:


6

안녕하세요, OSX에서 코어 덤프를 생성하는 방법을 찾았습니다!

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

소스 형식으로 다운로드 가능한 프로그램이 있습니다. 다운로드, 컴파일, 후 레이! 효과가 있었다! 거의 1GB의 코어 덤프가 생성되었습니다!

정보가 있는지 여부는 현재 중요하지 않습니다. OSX에서 코어 덤프를 생성하는 방법을 배웠는데, 이는 소프트웨어 개발자로서 유용한 기술이 될 수 있습니다.) 코어 덤프가 언제 유용한 지 알 수 없습니다.

몇 년 동안 제가 중요한 일을하고 있다고 상상할 수 있습니다. 무슨 일이 일어나고 있는지 알아 내기 위해 코어 덤프가 필요합니다.이 "gcore"앱이 제가 필요한 것입니다. 한 번 돈을 지불하더라도 ... 이것은 좋은 것입니다.


1
brew install gcore
— Guido

여기 에서이 지침을 사용 하여 gcore를 빠르게 설치할 수 있습니다 . "bash : brew : command not found"라고 표시되면 이 링크를 사용하여 homebrew를 설치 하십시오 .
— I'm_With_Stupid

gcore10.12 Sierra 이후 macOS에 포함되어 있습니다 . 에 있으며 /usr/bin/gcore맨 페이지도 있습니다 /usr/share/man/man1/gcore.1. 이것은 Homebrew에 의해 추가로 확인되며 Sierra 이상에서는 설치 gcore를 거부합니다/usr/local/bin .
— GDP2

1

Safari는 모든 양식에 대한 양식 데이터를 저장하지 않거나 사이트가 양식을 저장하지 않는 것으로 표시하지 않는 한 암호화 된 데이터베이스 파일에 저장합니다. 로그인 키 체인에서 파일의 비밀번호를 찾을 수 있으며 파일은에 ~/Library/Safari/Form Values있으므로 이론적으로 파일에서 데이터를 추출하고 입력 한 내용이 있는지 확인할 수 있습니다.

그러나 해킹을 받았으며 파일의 형식 또는 암호화 방법을 알 수 없으므로 실제로 내용을 얻는 방법을 모르겠습니다. 누군가는 확신합니다 :)


Safari가이 파일에 게시물을 저장 한 경우, 동일한 양식으로 이동하여 잃어버린 텍스트의 처음 몇 글자를 입력하여 간단히 다시 가져올 수도 있습니다. 전체가 자동 완성 제안으로 나타납니다.

게시물 내용에는 자동 완성 기능이 작동하지 않습니다. 한 줄 필드에서만 작동합니다. 수백 줄의 전체 기사가 아닙니다.

감사. 이 파일에 게시물 내용이 포함되어 있지 않은 것 같습니다. 0에서 7ffffFFFF로 덤프하여 2GB 파일을 만들었습니다. 그러나 완전히 0을 포함하는 것처럼 보였습니다. 여기에 뭔가 잘못되었습니다. 그 이유는 무엇입니까? : dump memory ~ / bla.bin 0 0x7fffFFFF 파일에 완전히 0이 포함됩니까? Safari는 0으로 실행되지 않습니까? 내부에 코드가 있어야한다고 가정하고 있습니까? ;)

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".
— 슬립 D. 톰슨

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.