'!stacks'에 해당되는 글 1건

  1. 2008.06.17 [WinDbg 명령] !stacks
WinDbg 디버깅2008. 6. 17. 00:29
반응형

커널스택을 보여주는 명령입니다.
모든 프로세스의 모든 쓰레드를 보여주기 때문에 다음과 같이 명령하면 !process 0 7 과 같은 역할을 합니다.

!stacks 2

뒤의 숫자 2 를 1 이나 0 으로 사용할 수도 있는데 숫자가 작을 수록 더 간단한 정보를 보여줍니다.

!process 0 7 과 비슷한 출력을 보이는 명령어를 구지 설명하는 이유는 !stacks 만의 특출난 기능이 있기 때문인데요.

!stacks 2 FilterString

처럼 뒤에 FilerString 을 주면 FilterString 이 포함된 콜스택만 보여줍니다. XP 이상에서만 지원하는 기능이지만 매우 편리한 기능입니다. 예를 들어 시스템이 대드락이나 행에 빠져있을 경우 자신의 드라이버에서 행이 걸려 있는지 간단하게 확인할 수 있습니다. !process 0 7 을 사용하면 모든 쓰레드의 콜스택을 펼쳐놓고 찾아야 하지만 이렇게 하면 콜스택에 드라이버가 존재하는 쓰레드만 보여주기 때문에 출력 내용이 간단하고 찾기가 수월해 집니다.

예제)
NDIS 드라이버가 걸려있는 쓰레드만 찾아 봅니다.

kd> !stacks 2 NDIS
Proc.Thread  .Thread  Ticks   ThreadState Blocker

Max cache size is       : 1048576 bytes (0x400 KB)
Total memory in cache   : 0 bytes (0 KB)
Number of regions cached: 0
0 full reads broken into 0 partial reads
    counts: 0 cached/0 uncached, 0.00% cached
    bytes : 0 cached/0 uncached, 0.00% cached
** Prototype PTEs are implicitly decoded
                            [863a5490 System]
   4.00006c  863a75b8 0001015 Blocked    nt!KiSwapContext+0x2e
                                        nt!KiSwapThread+0x46
                                        nt!KeRemoveQueue+0x20e
                                        NDIS!ndisWorkerThread+0x30
                                        nt!PspSystemThreadStartup+0x34
                                        nt!KiThreadStartup+0x16

                            [8613eda0 smss.exe]

                            [85ff21c0 csrss.exe]

                            [8611d0a0 winlogon.exe]

                            [8610a1b8 services.exe]

                            [85ff91d8 lsass.exe]

                            [860f37c8 svchost.exe]

                            ...

깔끔하게 NDIS 가 생성해 놓은 WorkerThread 하나만 나왔네요. 현재 다른 쓰레드에서는 NDIS 드라이버의 기능이 호출되지 않고 있다는 것을 알 수 있습니다.


http://www.driveronline.org/bbs/view.asp?tb=tipbbs&GotoPage=1&s_bulu=&s_key=&no=102

반응형
Posted by GreeMate