access_process_vm()은 Linux에서 어떻게 작동합니까?

access_process_vm()은 Linux에서 어떻게 작동합니까?

AFAIK, ptrace 시스템 호출은 access_process_vm다른 프로세스에서 데이터를 읽는 데 사용됩니다. 그러나 서로 다른 프로세스의 주소 공간은 어떻게 달성됩니까?

답변1

프로세스의 주소 공간은 실제로 서로 격리되어 있지만 커널에서는 격리되지 않습니다. 커널은 항상 모든 활성 프로세스의 메모리 레이아웃을 알고 있습니다. access_process_vm작동 방식은 다음과 같습니다.

64비트 플랫폼에서는 일반적으로 (이 페이지는 I/O 다시 매핑된 페이지가 아니며 마지막 단계의 매핑은 커널에 의한 직접적인 물리적 매핑에 의존합니다. 커널은 모든 물리적 메모리에 직접 액세스할 수 있습니다. 32비트 플랫폼에서는 HIGHMEM특정 매핑 생성이 포함될 수 있습니다. (후자가 kmap위의 마지막 링크에 정의된 이유입니다 highmem.h. 단지 이어야 합니다 HIGHMEM.)

관련 정보