2012-07-21 4 views
6

GDB를 사용하여 현재 연결되어있는 실행중인 프로세스에서 특정 값 (정수 마법 번호 (654321))을 찾으려고합니다. find [/sn] start_addr, +len, val1 [, val2, ...] 명령을 찾았지만 시작 및 종료 주소가 필요하지만 프로세스 메모리가 어디에서 시작되고 어디서 끝나는 지 알 수 없습니다.gdb에서 프로세스의 모든 메모리를 검색하려면 어떻게해야합니까?

이것은 매우 일반적인 문제인 것 같지만 1 년 전 인터넷 검색을 기억합니다. 이제는 성공하지 못해서 반복되었습니다. 프로세스 메모리가 어디에서 시작되고 어디에서 끝나는 지 어떻게 알 수 있습니까?

답변

4

"모든 메모리"라는 아이디어는 현대의 프로세스에서는 복잡합니다. 당신이 실제로 가지고있는 것은 다른 출처에서 많은 매핑입니다. 이러한 것들을 열거 할 수 있습니다 (읽기 권한없이지도에서 읽지 않도록하십시오!) 또한 공유 라이브러리 등의 .text 섹션을 검색하지 않도록 지능을 적용하고 싶을 수도 있습니다. 런타임에 /proc/$pid/maps을 읽은 다음 gdb에게 적절한 명령을 제공하도록 스크립트를 작성하십시오. 솔직히 바이너리 자체에서 루틴을 작성하여 gdb에서 호출하는 것이 가장 간단하다고 생각합니다.

+0

'/ proc/$ pid/maps'의 형식을 설명하는 맨 페이지가 있습니까? –

+0

@Jonas : http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o

+0

@ mark4o 감사합니다. 'maps','proc_maps','procfs'를 성공하지 못했습니다. –

관련 문제