컨트롤 레지스터는 현재 수행중인 태스크의 특성과 프로세스의 동작모드를 결정 짓는 특별한 레지스터이다.
32 비트와 32 비트 호환 아키텍쳐에서 이 레지스터들은 32 비트이고, 64 비트에서는 64 비트다.
mov CRn
인스트럭션으로 이 레지스터들을 건드릴수 있고..
CR3 레지스터는 페이지 디렉토리를 찾아가기 위한 레지스터이고.. 나머지는.. RTFM!
CR0 는 CPU 의 operating mode 와 상태를 제어하는 플래그를 포함하고 있다. 오홋.. ^^
PG, CD 등...중요한 플래그들이 많지만 일단 관심대상은 아니고.. ^^
WP
Write Protect (bit 16 of CR0) — Inhibits supervisor-level procedures from writing
into user-level read-only pages when set; allows supervisor-level procedures to write
into user-level read-only pages when clear. This flag facilitates implementation of the
copy-on-write method of creating a new process (forking) used by operating systems
such as UNIX*.
Copy-On-Write 매커니즘과 관련있는 넘이었군..
결국 이 플래그를 조작하면 write protection 속성을 바꿔치기 할 수 있다는 거다.
//
// 콘트롤 레지스터 관련 (IA-32 manual vol3, ch 2.5
// CR0 (Control Register Zero) 레지스터의 WP 비트(16)는 쓰기 속성제어에 사용됨
//
#define CR0_WP_MASK 0x0FFFEFFFF
VOID ClearWriteProtect(VOID)
{
__asm
{
push eax;
mov eax, cr0;
and eax, CR0_WP_MASK; // WP 클리어
mov cr0, eax;
pop eax;
}
}
VOID SetWriteProtect(VOID)
{
__asm
{
push eax;
mov eax, cr0;
or eax, not CR0_WP_MASK; // WP 비트 세팅
mov cr0, eax;
pop eax;
}
}
더 자세한 내용은 IA-32 메뉴얼의 4.1 섹션을 참고하면 된다.
요는 페이지 레벨의 프로텍션을 en/disable 하기 위해서는 PDE, PTE 의 플래그와 CR0 의 WP 비트를 조작한단 거다.
• Clear the WP flag in control register CR0.
• Set the read/write (R/W) and user/supervisor (U/S) flags for each page-directory and pagetable
entry.
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : 인텔 CPU에 있는 CR레지스터란놈들~~죽었어~~~
고수한분을 발견했다.. 이글루스에서 말이다. 그분의 글을 공부하고자...긁어왔다. <a title="" href="http://somma.e......more
제목 : CR0 트릭을 사용한 프로그램 .. 실제 코드
cr0 레지스터를 이용한 Write Protection 제거 IceSword 의 드라이버를 분석하다 보니 CR0 트릭을 사용하는 코드가 보여 포스팅 한다. :-) .text:00012152 loc_12152: ; CODE XREF: ......more
제목 : [DDK] 오~ 멋진 내용. @0@)/~
cr0 레지스터를 이용한 Write Protection 제거 나중에 시간나면 적용해 봐야겠다 ㅎㅎ 아직 별로 건드릴 일이 없는데... 곧 사용할지도 모르겠군... ㅡ_ㅡa......more
그런데 어떤것? 무엇에 대한 write 보호죠????
메모리 영역?요? 만약 그렇다면 메모리라면....가상 주소공간인가요? 물리 주소 공간인가요?
CR0.WP 비트는 메모리 페이지에 대한 속성제어 입니다.
결국.. 따지고 보면 물리 메모리에 대한 속성 제어가 맞죠...PTE 는 가상 주소 공간에서 물리 주소를 찾아가는 과정에서 이루어지는 체크일테니까요..
새해 복 많이 받으세요
앞으로도 계속 좋은 정보 기대하겠습니다. 수고하세요..
언젠가는 건들어야 할 개념들....으음~_~
일단 유저단에서 최대한 알고 들어가야겠습니다
그래야지 시스템레벨에서의 예술을 감상할수있겠네요 ^__^;
COW = 소 :-)
약간의 부담도 ...ㅎㅎ
결국은 WP때문에 COW가 일어나지 않아서였네요.
감사합니다 ㅡ.ㅜ