redis 데이터베이스를 사용하고 있으며 응용 프로그램이 사용하는 RAM의 내용을 탐색하고 싶습니다.
나는 왜 이것을하고 싶은지에 대한 설명을 내가 묻는 질문보다 더 의미가 있다고 생각합니다.
Redis는 이진 데이터를 저장하는 간단한 키 값 저장소입니다. 나는 인코딩과 같은 것들을 탐험하기에 좋은 장소라고 생각하며 바이너리 패턴의 데이터를 찾고 RAM을 통해 스키밍하고 간단한 패턴을 찾는 것과 같은 일을하는 것이 흥미로울 것입니다. RAM에서 검색 한 베이비 쿼리 언어를 작성한다는 아이디어를 탐색 할 수 있습니다.
쿼리 언어에 대한 SICP 장을 읽은 후이 아이디어를 얻었습니다 .
어디서부터 시작해야 할 생각이 있습니까? 처음에는 시스템에 “이 응용 프로그램이 실행중인 주소 공간을 알려주십시오”라고 묻고 싶습니다.
답변
gdb를 사용하여 프로세스 메모리에 액세스 할 수 있습니다.
또한 “/ proc”파일 시스템을 살펴 봐야합니다. 여기에는 모든 프로세스에 대한 의사 파일이 들어 있습니다. 그들 중 일부는 흥미로운 정보를 포함 할 수 있습니다
답변
cat /proc/[pid]/maps
proc 맨 페이지에 따르면.
당신이 원하는 것 같습니다. pid가 필요한 경우 ps 또는 다른 도구에서 가져옵니다.
사용중인 주소 공간을 찾는 데 사용됩니다. 작년에 defcon의 동료 중 한 명이 Linux에서 createremotethread를 구현했습니다. 그렇게 할 수 있습니다 … 그런 다음 임의의 메모리를 읽습니다.
더 읽기 쉽다는 점 을 지적한 psusi의 신용 pmap -x [pid]
.
답변
디버거를 사용하십시오.
자신의 롤을 원한다면 모두 통과 ptrace
합니다.
프로세스의 메모리 맵 (메모리의 목차)을 /proc/$pid/maps
보고에서 전체 메모리 내용을 읽을 수 있습니다 /proc/$pid/mem
. 후자의 파일을 정상적으로 열 수는 없습니다. Linux에서 / proc / $ pid / mem을 어떻게 읽습니까?를 참조하십시오.