'Kernel Stack Overflow'에 해당되는 글 1건

Posted on 2010/03/06 12:09
Filed Under [[ 컴퓨터 ]]/[[ Kernel ]]

오늘 고수님께서 공유해 주신 문서를 내용은 다음과 같다.

http://www.microsoft.com/whdc/Driver/tips/KMstack.mspx

Kernel Mode에서 놀다 보면, 늘 Stack 과의 싸움이 시작된다.

실제로 개발 과정에서는 전혀 문제가 발생하지 않는다.

Because....

QA 중에 타사의 프로그램 환경을 구축하는 것도 어렵고,

구축한다고 해도 그것이 실제로 쓰이는 환경인지 아무도 모른다.

한 회사에서 보안프로그램이 얼마나 많이 쓰일가?

PC 보안, DRM, 매체제어, 보안USB, 화상회의 시스템, IP 자원 관리 솔루션,
백신...

많이 쓰이면 쓰일 수록 문제는 많이 발생한다.

왜?

각 사의 제품끼리 테스트를 진행하지 않기 때문이다.

보안제품이라는 이유로 홈페이지에 프로그램을 다운받을 수도 없게 만들어져 있다.

즉 필드에 실제로 나가봐야 충돌이 일어 날지 알 수 있다.

그 중에 대표적인 오류가 Kernel Stack Overflow 이다.

이건 뭥미?

Thread 별로 스택 사이즈가 고정되어 있다.

이 size가 넘어 갈 경우 발생하는 오류(BugCheck) 이다.

일반적으로 x86 에서는 12K로 Fix 되어 있으며, UI 관련 thread 일 경우 24K로 되어 있다.

자 그럼...

내가 만든 함수가 다음 함수를 호출 하여 제어권을 넘겼을 경우,

Kernel Stack Overflow 가 발생할 수 있을 지 판단하고 함수를 구현하는가?

대부분 안하고 있다.

왜?

1. 모른다..
2. 귀찮다.
3. 스택을 계산하는 것도 부하를 준다.
...

머 대충 이런 이유일 것이다.

실제로 자사의 제품 만으로는 재현이 되지 않을 것이다.

필드에서 재현되도, 이게 딱히 누구의 오류라고 말을 하지 못한다.

하라는 대로 구현해서 제어권을 넘겼기 때문이다.

(상대방을 배려하지 않았지만, 그렇다고 피해를 준것도 아닌데....)

OS가 전체 스택에서 가장 많이 차지 하고,

나머지 제품에서 고루고루 나누어 써야 한다.

그럼 OS는 왜 스택을 많이 사용하며, 크기를 제한 하였을 가?

답은....By design 이다.

MS에 돈을 주고 물어 봐도 이렇게 대답할 것이다.

결론은 문서에 나와 있는 데로...

작게 써라...

지역변수를 사용할 때 고민하고...

안그럼 나중에 한 방에 훅~~~ 간다...




크리에이티브 커먼즈 라이센스
Creative Commons License
2010/03/06 12:09 2010/03/06 12:09

About

by 두딩이

Counter

· Total
: 15608
· Today
: 12
· Yesterday
: 23
Statistics Graph