티스토리 뷰

System/Windows

Windows 특권레벨

Tribal 2016. 3. 10. 16:20

#--------------------------------------------------- Windows의 특권 레벨 ---------------------------------------------------------#

  Windows에서는 0~3까지의 특권레벨이 있다. 0은 커널, 1과 2는 디바이스 드라이버 레벨, 3은 유저 레벨을 나타낸다. 하지만 실제로 사용하는 특권레벨은 0과 3 정도이고 1과 2는 본 적이 없다.


  세그먼트 레지스터를 갱신할 때는 특권레벨에 대해 조건을 만족해야만 한다. 

  특정 특권레벨을 가지고 수행되는 코드가 다른 데이터 세그먼트의 메모리를 참조하기 위해서는 그 데이터 세그먼트의 DPL이 현재 실행중인 CPL보다 수치적으로 크거나 같아야 참조할 수 있다.

  • 데이터 세그먼트 갱신 : DPL >= MAX(CPL, RPL)
  • 스택 세그먼트 갱신 : DPL = CPL = RPL
  • 코드 세그먼트 갱신 : 데이터 세그먼트와 스택 세그먼트처럼 직접적으로 변경할 수 없다. 같은 특권레벨을 가진 경우는 세그먼트 간의 JMP나 CALL 명령어를 통해 가능하지만 다른 특권레벨의 경우는 두 가지 경우를 제외하고는 불가능하다.
    - 세그먼트 디스크립터의 TYPE에서 Conforming bit가 1로 세팅된 경우 : 특권레벨에 대한 권한을 무시하도록 설정한 것, Conforming이 세팅된 세그먼트에 정의된 DPL보다 수치적으로 같거나 낮은 모든 CPL 코드 세그먼트는 제어 이행 가능하다. 다만 CPL은 변경되지 않는다.
    - 콜게이트(Call Gate) 사용 : 낮은 특권레벨의 코드가 높은 특권레벨 코드로 이행 가능하도록 해준다. 콜게이트를 통해 특권레벨이 달라지는 경우 OS에서 태스크 변환 시 세팅되어지는 TSS(Task State Segment)의 내용을 참조하여 자동으로 스택 세그먼트 값과 ESP의 값이 변경된다.

  ※ 콜게이트(Call Gate) : 시스템 디스크립터 중 하나, 타입 비트는 1100으로 명시됨, 게이트라서 베이스와 리미트가 없다!
  ※ 콜게이트 디스크립터의 DPL 필드에는 이 게이트에 접근할 수 있는 코드 세그먼트의 권한을 세팅한다.

  


참고 : Windows 구조와 원리_한빛미디어

'System > Windows' 카테고리의 다른 글

Windbg 크래시 관련 옵션  (0) 2017.09.28
Heap Feng Shui 정리  (0) 2017.07.26
페이징 정리 2  (0) 2016.03.10
페이징 정리 1  (0) 2016.03.02
스레드의 상태  (0) 2016.03.02
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31