- lumenFC 축구 동호회
- 마샤블
- 웍스프레소
- 소셜@나눔<소셜미디어나눔연구소>
- 리버스코어
- LAIN
- LAIN 이사한 블로그
- TeamCR@K
- Sunnyday
- 보안 걱정이
- 리버싱 학습
- securityfirst_jo
- Practical Security Blog
- 세상, 그 유쾌한 전장
- 악성코드관련블로그
- Back to the Mac
- 패킷분석입문
- PacketInside / 네트워크 패킷 분석 블로그
- 침해사고분석 :: 네이버 블로그
- 소프트웨어 기술자경력관리시스템
- JK.Moon
- 자바 온라인학습
- Ezbeat의 도서관
- Dreams of a Final Journey
- IT eBooks - Free Download - Bi…
- Index of /madchat/coding/rever…
- Security Insight
- Reversing war game
- 고길고기
- clamav
- zerowine
- FORENSIC-PROOOF
- jquery 예제
- 조대협의블로그
- 국가과학기술인력개발원 교육포털 사이트
- 빅데이터, splunk
- 지식을 연주하는 사람
- malware analysis system
- 건국대토익스피킹
- 소프트웨어개발 및 협업도구
kisoo
커널 스텍 사이즈 12kb 인한 고려 사항 본문
커널 스택 사이즈가 12KB로 인해서 커널 모드 (드라이버)개발 할때 주의할 사항에 대해서 알아보겠습니다.
[커널 스택 (Kernel Stack)]
커널 모드 루틴은 유저 모드 스택과 동일한 방식으로 동작하는 스택을 가지고 있다. 그러나 커널 스택의 최대 사이즈는 매우 작고 커지지 않기 때문에 아껴서 사용해야 한다. (User Mode Stack : 1MB->부족할 경우 자동으로 사이즈가 커진다. Kernel Mode Stack : 12KB->부족해도 커지지 않는다.) 아래 3가지 TIP은 커널 스택사용할때 주의 사항이다.
1) 재귀 루틴은 커널 스택 사용에 있어 특히 주의를 해야 한다. 보통 드라이버는 재귀적 루틴을 사용하면 안된다.
2) 디스크 I/O 경로는 깊은 계층적 경로를 가지고 하나 이상의 페이지 폴트 처리가 가끔 필요하기 때문에 스택 사용에 매우 민감하다.
3) 큰 데이터 오브젝트를 여기저기 사용하는 드라이버는 보통 이 오브젝트를 스택상에 두지 않는다. 대신 드라이버는 오브젝트를 위한 넌페이지드(Non Paged Pool) 메모리를 할당하고 이 메모리의 포인터를 전달한다. 이것은 커널 모드 프로세스가 같은 주소 공간을 공유하기 때문에 가능하다.
[커널 스택 딜레마]
메모리 관리에 있어서 커널 스택은 개발자의 가장 친한 벗인 동시에 가장 나쁜적이다. 풀(Pool)에 데이터 구조체를 두는 것보다 스택에 배치하는 것이 드라이버 단순화에 매우 도움이 되는 경우가 많다. 그러나 커널 스택이 매우 작기 때문에 많은 데이터를 스택에 위치시키는 것은 주의가 필요하다. 매우 깊은 콜스택을 가진 가장 아래쪽의 드라이버(예를 들어 Service Storage Device)는 특별한 주의가 필요하다. 메모리 매니저와 파일 시스템 드라이버가 그들의 위에 있고 스택 공간의 아주 큰 부분을 독차지 하고 있을 수가 있기 때문이다.