2
x86 세그먼트 화 보호에서 blog post을 읽었습니다. RPL이 DPL과 다를 수 있습니까? 그렇다면이 경우 사용 케이스는 무엇입니까?RPL은 x86 시스템의 DPL과 다를 수 있습니까?
x86 세그먼트 화 보호에서 blog post을 읽었습니다. RPL이 DPL과 다를 수 있습니까? 그렇다면이 경우 사용 케이스는 무엇입니까?RPL은 x86 시스템의 DPL과 다를 수 있습니까?
그들은 다를 수 있으며 의도적 인 것입니다.
OS/커널이 사용자 코드를 대신하여 작업을 수행 할 때 사용자 코드의 권한 (RPL
은 사용자 코드 수준 인 Requestor Privilege Level
을 반영)을 사용하여 메모리에 액세스 할 수 있습니다. 그것들이 불충분하면, 예외는 연산을 실패한다. 이 (또는 유사한) 메커니즘이 없다면, 사용자 코드는 어떻게해서든지 운영을 요구함으로써 OS/커널을 파괴 할 수 있으며 커널의 특권을 가지고 커널에 의해 수행됩니다. 그것이 EOP이되는 곳입니다.
세그먼트에 대한 자세한 내용은 인텔의 CPU 매뉴얼을 참조하십시오. 모든 것이 있습니다.
링 0의 커널 코드와 링 3의 사용자 코드로 CPL, RPL 및 DPL 값을 지정하면 더 구체적으로 사례를 만들 수 있습니까? – Bruce
DPL은 커널 세그먼트의 설명자 (예 : 커널 (일반적으로 0) 또는 사용자 (3) 일 수 있음). 커널의 CPL은 0입니다 (거의 항상). 세그먼트에 액세스하는 데 사용되는 세그먼트 선택기의 RPL은 요청자의 레벨입니다. 요청자가 커널 인 경우 일반적으로 0입니다. –
따라서 최대 (CPL, RPL) = 0이고 DPL은 0 또는 3 일 수 있습니다. 따라서 커널은 모든 데이터 세그먼트에 액세스 할 수 있습니다. 에 싶어. 그러나 다른 사용자의 코드에서 우연히 무언가를 변경하는 것을 피하기 위해 다른 사용자 대신 코드를 실행할 때 커널이 RPL 3을 사용한다고 말하고 있습니다. 그러나 RPL = 3으로 설정하면 커널에 속한 데이터 세그먼트를 DPL 0으로 만들 수 없습니다. 혼란 스럽네요. – Bruce