2010-07-27 18 views
8

/proc/$ PID/maps를 읽을 때 매핑 된 메모리 영역을 얻습니다. 이 지역 중 하나를 덤프하는 방법이 있습니까? 당신은 프로세스에 GDB를 첨부 할 수 있습니다프로세스의 덤프 메모리

$ cat /proc/18448/maps 
...[snip]... 
0059e000-005b1000 r-xp 00000000 08:11 40   /usr/local/lib/libgstlightning.so.0.0.0 
005b1000-005b2000 r--p 00012000 08:11 40   /usr/local/lib/libgstlightning.so.0.0.0 
005b2000-005b3000 rw-p 00013000 08:11 40   /usr/local/lib/libgstlightning.so.0.0.0 
...[snip]... 

감사

답변

10

아니를! ptrace()PTRACE ATTACH으로 전화하십시오. 그런 다음 /proc/<pid>/mem을 열어 영역 오프셋을 찾고 /proc</pid>/maps에 주어진대로 영역의 길이를 읽습니다.

여기에는 program I wrote이 있는데, 여기에는 module I wrote이 있는데, Python (and the ptrace binding)에서이 작업을 수행합니다. 완성품은 program that dumps all regions of a process to files입니다.

즐기십시오!

+0

쿨 :) 고마워요 – mathk

+0

진드기 감사합니다. 이 물건에 많은 경험을 얻었습니다 : P –

5

다음이 함께 위치 L에서 시작하는 길이 X 단어의 메모리 영역을 덤프 : x/Xw L.

프로세스 시작시 gdb를 첨부하는 것은 간단합니다 : gdb ./executable 다음 run입니다. 실행중인 프로세스에 연결해야하는 경우 gdb를 시작한 다음 gdb attach pid 여기서 pid는 관심있는 프로세스 ID입니다.

+0

감사합니다. :) 그것에 대해 생각해 보지 않았습니다. – mathk

+1

실행중인 프로세스에 연결하기 위해 명령 줄 인수를 사용할 수 있습니다 :'gdb -p '. –

+0

잘 알고 있습니다. 나는 리모트 타겟에만 gdb를 사용했다. – nmichaels

4

DD (1) 사용 :

sudo dd if=/dev/mem bs=1 skip=$((16#0059e000 - 1)) \ 
     count=$((16#005b1000 - 16#0059e000 + 1)) | hexdump -C 
관련 문제