'2009/08/28'에 해당되는 글 1건
2009/08/28 12:30
[컴쟁이의 연구실]
smss.exe가 하는일을 살펴보다가 재미난 것을 발견했습니다.
(smss가 하는일은 windows internals 4th 책 p376에 나와있더라구요.. 5th 영문판은 더 자세하게 나와있네요)
대상 OS는 Windows 2000 Server SP4 입니다.
먼저 ProcExp로 smss.exe의 Properties를 살펴보았습니다.
procexp로 살펴본 smss프로세스는 6개의 스레드를 가진것을 볼 수 있는데요. 여기서 TID 164, 168은
동일한 Start Address를 가지고 있으므로(SmApiPort에 관한 스레드) 이 2개를 제외한 다른 스레드를
살펴보았습니다.
한쪽에 디버거를 실행하고 노트패드를 어태치 후 Break, Run 을 반복 수행하면 smss.exe의
TID중 172, 112 스레드의 Context Switches 카운트가 증가하는 것을 알 수 있었습니다.
그래서 TID 112 스레드를 Suspend 시킨 후, 디버거를 살펴보니 Break, Run이 수행되지 않더라구요.
다시 TID 112 를 Resume 해주었더니 디버거가 잘 동작하네요. 반대로 TID 172를 Suspend시켜도
동일하게 디버거는 작동하지 않더라구요.
TID 112와 172는 디버깅과 관련된 스레드임이 분명한것 같습니다.
조금더 살펴보면 무언가 재미난 것이 숨겨져 있지 않을까요..
(smss가 하는일은 windows internals 4th 책 p376에 나와있더라구요.. 5th 영문판은 더 자세하게 나와있네요)
대상 OS는 Windows 2000 Server SP4 입니다.
먼저 ProcExp로 smss.exe의 Properties를 살펴보았습니다.
procexp로 살펴본 smss프로세스는 6개의 스레드를 가진것을 볼 수 있는데요. 여기서 TID 164, 168은
동일한 Start Address를 가지고 있으므로(SmApiPort에 관한 스레드) 이 2개를 제외한 다른 스레드를
살펴보았습니다.
한쪽에 디버거를 실행하고 노트패드를 어태치 후 Break, Run 을 반복 수행하면 smss.exe의
TID중 172, 112 스레드의 Context Switches 카운트가 증가하는 것을 알 수 있었습니다.
그래서 TID 112 스레드를 Suspend 시킨 후, 디버거를 살펴보니 Break, Run이 수행되지 않더라구요.
다시 TID 112 를 Resume 해주었더니 디버거가 잘 동작하네요. 반대로 TID 172를 Suspend시켜도
동일하게 디버거는 작동하지 않더라구요.
TID 112와 172는 디버깅과 관련된 스레드임이 분명한것 같습니다.
조금더 살펴보면 무언가 재미난 것이 숨겨져 있지 않을까요..

