본문 바로가기
Programming/WDK

메모리 접근

by bbolmin 2014. 1. 19.





[ 메모리 접근 검사 ]



[ 디스크립터(세그먼트) 검사 ]


- GDT의 Segment Descriptor검사 <- DPL(Descriptor Privilege Level)

- 해당 메모리에 접근하기 위한 링 레벨 값(0~3) 정의.

* 윈도우는 실제적으로 디스크립터 검사를 이용하지 않음




[ 페이지 디렉토리 검사 ]


- 메모리 페이지(페이지 테이블)의 모든 user/supervisor bit를 검사

- bit값이 0이면 관리자 권한(링0,1,2)를 가진 프로그램만 접근

- bit값이 1이면 모든 프로그램이 해당 메모리 페이지 영역에 접근




[ 페이지 검사 ]


- "페이지 디렉토리 검사" 후 접근하고자 하는 메모리 페이지를 각각 검사.

- 페이지 디렉토리와 동이하게 user/supervisor bit 검사.













[ 페이지-디렉토리 엔트리 ]



[*] CR3 레지스터 페이지 디렉토리의 베이스 주소를 기리킨다. (CR3는 프로세스별로 존재)


- U비트(2번째 비트) : 0이면 해당 페이지 테이블은 커널에 의해서만 접근 가능.

- W비트(1번째 비트) : 0이면 해당 메모리 영역은 읽기 전용 영역.


==> 해당 페이지 테이블 전체에 적용되는 속성





[ 페이지-테이블 엔트리 ]


- 하나의 메모리 페이지에 대응.

- U비트(2번째 비트) : 0이면 해당 페이지는 커널에 의해서만 접근 가능.

- W비트(1번째 비트) : 0이면 해당 메모리 영역은 읽기 전용 영역.

- P비트(0번째 비트) : 0이면 해당 메모리 페이지는 현재 디스크로 페이지 아웃됨. <- 물리 메모리상에 존재하지 않음









윈도우XP 이상에서 SSDT와 IDT가 속한 메모리는 읽기 전용 속성이다.



아래와 같이 레지스트리 변경 및 추가


HKLM\SYSTEM\CurrentControlSet\Control|Session Manager\Memory Management\EnforceWriteProtection = 0

HKLM\SYSTEM\CurrentControlSet\Control|Session Manager\Memory Management\DisablePagingExecutive = 1












'Programming > WDK' 카테고리의 다른 글

SSDT 후킹  (0) 2014.02.22
가상주소-선형주소-물리주소 변환  (0) 2014.01.25
WDK빌드 환경 ( + Visual Studio )  (0) 2014.01.13