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.