설명

설명

설명

가상 주소 공간과 물리적 주소 공간 두 가지 종류가 있습니다. 물리적 모델에서(일반적으로 커널에서 사용됨)메모리는 제한되어 있으며 각 주소는 물리적 주소에 해당합니다.

가상은 프로세스에서 사용됩니다. 제한은 없어(포인터 크기로 인한 것을 제외). 더 많은 메모리를 얻으려면 프로그램에서 요청하면 됩니다.(요청 가능한 금액 무시). 각 주소는 서로 다른 물리적 주소에 매핑됩니다.
이것이 바로 RAM에서 읽을 수 있는 프로세스가 제한되는 방식입니다.

문제

그 이유는 시스템 호출이 ring0을 사용하지만 동시에(적어도 리눅스에서는)프로세스 상태는 인터럽트 가능으로 업데이트되어 시스템 호출이 가상 주소 공간을 사용함을 나타냅니다.
내가 아는 한, CPU 링은 주소 공간이 아니라 권한 있는 명령에 관한 것입니다.(MMU와 관련이 있기 때문에).

따라서 범위를 벗어난 읽기라면(취약점으로 인해)커널 코드에서 시스템 호출을 실행하는 동안 발생합니다. 다른 프로세스에서 메모리를 반환할 수 있나요?

답변1

커널 모드 코드는 다양한 프로세스의 주소 공간을 스누핑하는 것을 포함하여 원하는 거의 모든 작업을 수행할 수 있습니다.

예, 커널 모드 코드는 가상 주소 공간을 사용합니다. 커널관리하다물리적 주소 공간이지만 그렇지 않습니다.뛰어들다물리적 주소 공간.

사용자 모드는 물리적 주소를 주장할 방법이 없기 때문에 RAM에서 원하는 내용을 읽을 수 없습니다.

커널 모드는 주소 변환이 활성화된 상태로 실행되므로 커널 모드 코드도 가상 주소만 주장할 수 있습니다. 그러나 k-모드 코드는 페이지 테이블 항목을 설정하여 액세스하려는 물리적 주소로 변환되는 가상 주소를 정의할 수 있습니다.

답변2

커널이 호출하는 시스템 호출은 물리적 주소 공간을 사용합니다.
프로세스에 의해 호출되는 시스템 호출은 가상 주소 공간을 사용합니다.

관련 정보