< Fast System Call에 의한 커널코드 진입방식 >



< Fast System Call에 의한 커널코드 진입방식 >



1. 인텔 펜티엄 2 이상에서 사용함.

2. SYSENTER, SYSEXIT 2개의 명령어 사용함.

3. SYSENTER는 Ring 3에서 사용되는 명령어로, 마이크로프로세서에 있는 MSRs(MODEL-

SPECIFIC REGISTERS)로부터 진입하고자하는 커널의 CS, EIP의 레지스터 정보와 커널 레벨 진입

후, 사용하게 될 스택 정보 SS, ESP를 가져와서 세팅한 후 커널레벨로 진입이 이루어진다.

http://blog.naver.com/gunner98?Redirect=Log&logNo=110026271729

[열기]


4. SS(Stack Segment)의 경우 SYSENTER_CS_MSR + 8로 지시되고 있으며, 이는 운영체제를 시작

할 때, Fast System Call을 지원하게 하기 위해서는 GDT(Global Descriptor Table)에서 SS(Stack

Segment)의 위치를 CS(Code Segment) 다음에 위치하도록 만들어야 한다는 이야기이다.

5. SYSEXIT 명령는 다시 복귀하게 될 Application의 CS와 SS를 SYSENTER_CS_MSR + 16과

SYSENTER_CS_MSR + 24로 계산하여 찾으므로 GDT에서 커널레벨의 SS 다음에 배치해야 한다.

6. SYSENTER에 의해 SYSENTER_EIP_MSR에 저징되어 있는 주소로 커널레벨 전환이 이루어진 후

커널에서는 자신이 수행하고자 하는 코드를 수행한 후 다시 Application으로 돌아오고자 하는 할 때

사용하는 명령어가 SYSEXIT이다.

7. SYSEXIT는 IRET 과는 달리 우리가 Application 레벨로 복귀하게 될 EIP, ESP 값을 EDX, ECX 레

지스터에 먼제 세팅하여 준 후 호출해 주어야 하며, 이렇게 호출되어진 SYSENTER는

SYSENTER_CS_MSR + 16과 SYSENTER_CS_MSR + 24를 사용하여 복귀하게 된 Application의

CS와 SS를 세팅하고 SYSEXIT를 호출하기 전에 세팅한 EDX와 ECX 레지스터 값을 통하여 EIP,

ESP를 세팅한 후 복귀하게 된다.



by narumee | 2008/01/10 11:19 | └Windows Internals | 트랙백 | 덧글(0)

트랙백 주소 : http://octet.egloos.com/tb/1267855
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶