Monthly Archive for 3월, 2009

MDAA Volumes to be translated in Korean

에이콘 출판사에서 MDAA Volumes를 번역할 예정으로 보입니다

기대 되는군요 !!

http://www.opentask.com/korean-rights-mdaa-v1-v2
http://www.dumpanalysis.org/blog/index.php/2009/03/29/mdaa-volumes-to-be-translated-in-korean/

Double Resource Acquire에 의한 Dead Lock

0: kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks…………………………………………………………….

Resource @ 0×8409eee0 Shared 1 owning threads
Threads: 843b8643-01<*> *** Actual Thread 843b8640
KD: Scanning for held locks……

Resource @ 0×83fee918 Shared 1 owning threads
Threads: 82a53860-01<*>
KD: Scanning for held locks………

Resource @ 0×842dd9ac Shared 1 owning threads
Contention Count = 46
NumberOfSharedWaiters = 1
NumberOfExclusiveWaiters = 24

Threads: 82a53860-01<*> 84157da8-01
Threads Waiting On Exclusive Access:
83faad80 83f48d38 841ea790 83ff45d8
8402d8e8 82a57da8 8404f2a0 83f045c8
8403a6a0 83facda8 83fd7da8 82a53860
843466b8 84052a68 8389a790 8434e680
84029bf0 82a4e998 840527f0 840b57a0
840102f8 8402ea68 83faa8e0 840ad360

KD: Scanning for held locks……….

Resource @ 0×82ff5040 Shared 1 owning threads
Threads: 843b8023-01<*> *** Actual Thread 843b8020
2955 total locks, 4 locks currently held

Cross Accqure가 없는데도 불고하고 다수의 Thread가 대기 상태인것을 확인 할 수 있습니다. 얼핏보기에는 문제가 없는 것으로 보이지만 자세히 보면 82a53860 Thread가 Shared Acquire와 Exclusive Acquire를 같은 스택상에서 같은 Resource를 호출 한것을 볼 수 있습니다. 그러한 이유에서 절대로 Waiting이 풀릴 수 없는 Thread(82a53860 Thread) 를 다를 Thread들이 기다리고 있게 되는것으로 Dead Lock이 발생하게되죠. 이러한 경우는 보통 Service API Hooking시 다수의 함수에서 같은 Resource를 사용하여 동기화 처리를 할 경우 많이 발생합니다. 물론 그 사이사이에 다른 Filter Driver, Hooking Driver들이 존재 해서 발생하는 경우가 대부분이지만요 .

Cross Acquire가 없는데도 Waiting Thread가 다수 존재할 경우 Double Acquire를 의심해 보시면 도움이 되실 꺼라 생각 됩니다.

Kernel Stack Overflow를 막는 한가지 방법

일반적으로 Kernel Stack의 사이즈는 굉장히 작기 때문에 UNEXPECTED_KERNEL_MODE_TRAP (7f) 와 같은 BugCheck이 자주 발생하곤 합니다. 이러한 경우에는 로직을 변경하거나 사용하는 Stack의 Size를 조정하여 문제를 해결하곤하죠.
하지만 이러한 방법 말고도 KeExpandKernelStackAndCallout을 이용하여 문제를 해결할 수 있습니다. KeExpandKernelStackAndCallout 함수는 Stack Jump를 통해서 Expand Stack를 사용할 수 있도록 도와 줍니다.

자세한 내용은 MSDN과 Advance Memory Management 문서를 보시면 도움이 되실듯 합니다.
MSDN : http://msdn.microsoft.com/en-us/library/aa906738.aspx
Advance Memory Management : http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/MemMgt.docx