2008년 01월 10일
< 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를 세팅한 후 복귀하게 된다.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- API Hooking - 유저모드와 커널모드 by narumee
- Windows NT 시스템 콜은 어떻게 동작하는가? by narumee
- 어셈블리어(Assembly Language)와 C 그리고 호출 규약(Calling Convension) by 하나두리
- Book: Windows 구조와 원리 by 시즈하
- Managed Callstack by SehYoon
# by | 2008/01/10 11:19 | └Windows Internals | 트랙백 | 덧글(0)








☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]