AFAIK, ptrace 시스템 호출은 access_process_vm
다른 프로세스에서 데이터를 읽는 데 사용됩니다. 그러나 서로 다른 프로세스의 주소 공간은 어떻게 달성됩니까?
답변1
프로세스의 주소 공간은 실제로 서로 격리되어 있지만 커널에서는 격리되지 않습니다. 커널은 항상 모든 활성 프로세스의 메모리 레이아웃을 알고 있습니다. access_process_vm
작동 방식은 다음과 같습니다.
- 그것대상 프로세스의 메모리 관리 정보를 검색합니다.(커널은 호출 프로세스에 대해 이미 알고 있습니다.)
- 그것읽고 싶은 페이지가 메모리에 고정되어 있는지 확인하세요.(즉존재하지만 완전히 해제되지 않고 존재하므로 호출된 모든 페이지를 다시 읽게 됩니다.
- 그것커널의 모든 원격 페이지 매핑, 요청된 데이터를 적절한 방향으로 복사합니다.
64비트 플랫폼에서는 일반적으로 (즉이 페이지는 I/O 다시 매핑된 페이지가 아니며 마지막 단계의 매핑은 커널에 의한 직접적인 물리적 매핑에 의존합니다. 커널은 모든 물리적 메모리에 직접 액세스할 수 있습니다. 32비트 플랫폼에서는 HIGHMEM
특정 매핑 생성이 포함될 수 있습니다. (후자가 kmap
위의 마지막 링크에 정의된 이유입니다 highmem.h
. 단지 이어야 합니다 HIGHMEM
.)