Microsoft MVP성태의 닷넷 이야기
WinDbg 커널 디버깅에서의 thread freeze [링크 복사], [링크+제목 복사],
조회: 5022
글쓴 사람
iiliiilliilli
홈페이지
첨부 파일
 

WinDbg로 커널 디버깅 시 thread를 freeze 시키는 방법이 있을까요?

커널 디버깅이 아니라면 다음( https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-f--freeze-thread- )과 같은 명령어도 있는 것 같습니다만..

대체적인 방법으로 breakpoint를 걸고 `eb fe(JMP TO SELF)`로 코드 패치하여 무한 루프를 돌게한 후에 다시 작업이 끝나면 코드를 원상복귀 시키는 방법을 쓰려고 했지만,
이렇게 할 경우 오버헤드가 크게 발생하는 것 같습니다.








[최초 등록일: ]
[최종 수정일: 8/26/2022]


비밀번호

댓글 작성자
 



2022-08-26 03시57분
Inside Windows Debugging 책에도 커널 모드에서의 스레드를 eb fe로 제어하는 것을 소개하고 있는 걸로 봐서는 딱히 windbg에서 제공하는 명령어는 없는 것 같습니다. (공식 문서에 없으니.)

그 외 다른 의견을 보면 user-mode 디버거와 연동하라고 하는데, 이건 Kernel에서 생성한 System Thread에 대해서는 통하지 않는 문제가 있습니다.

저도 해보진 않았지만... 어차피 SuspendThread의 동작을 그대로 해주면 안 될까요? 일단은, _KTHREAD의 SuspendCount를 올려주면 될 듯하고, 문제는 SuspendSemaphore 필드인데... 그걸 수작업 구성해서 OS에 인식시키는 것이 바이트 패치만으로는 어려울 듯하니, 그런 작업을 대행하는 kernel driver를 만들어야 할 것입니다.

혹시, 성공하시게 되면 후기 좀 들려주세요. ^^

그나저나, 처음에는 왜 커널 모드에서 스레드 제어 기능을 제공하지 않는지 이해가 안 되었는데, 답변을 하다 보니 수긍이 됩니다. 따지고 보면, windbg가 커널 메모리를 읽거나 쓰는 정도의 기능을 제공하는 것이므로 OS가 멈춘 상태에서 kernel API를 호출할 수는 없으므로 user-mode처럼 스레드를 중지/재시작하는 기능을 갖출 수는 없었을 것 같습니다.
정성태
2022-08-26 05시46분
[ilililililll] 종합적으로 바라볼 수 있게 되었네요.. 역시 공식 문서에 없는 것은 이유가 있었군요 감사합니다! 방법을 찾아보겠습니다 성공하면 공유드리겠습니다:)
[guest]

... 46  47  48  49  50  [51]  52  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
1555김응규4/22/201515504WCF net.tcp 관련해서 질문 드립니다. [2]
1556김응규4/22/201512890    답변글 [답변]: WCF net.tcp 관련해서 질문 드립니다. [1]파일 다운로드1
1554(삭제)4/19/201513649안드로이드 에뮬레이터에서 특정 앱 구동불가할때! [2]
1552spow...4/18/201519540마이크로세컨드 단위의 Sleep이 필요한데 찾질 못하겠습니다. [5]
1553spow...4/18/201512847    답변글 [답변]: 마이크로세컨드 단위의 Sleep이 필요한데 찾질 못하겠습니다. [1]
1551인디언기...4/16/201512143iisnode에 대해서 글 올리셨던데 질문이 있습니다 [1]
1549김선아4/15/201512635.net framework 4.5와 c++ dll에 관한 질문입니다 [1]
1550김선아4/15/201511002    답변글 [답변]: .net framework 4.5와 c++ dll에 관한 질문입니다 [2]
1547문명식4/3/201513027IWebBrowser Key Event 관련 [2]
1545나종식3/25/201512029internet explorer dns cache flush [2]
1543이용원3/23/201511941hyper-v 질문드려요! [1]
1544이용원3/24/201511095    답변글 한가지만 더 여쭤볼게요! [1]
1541임기성3/20/201518327Microsoft.Office.Core dll관련 문제 [1]
1539펜플3/17/201511660asp.net 질문입니다. [1]
1540113/17/201511618    답변글 [답변]: asp.net 질문입니다. [1]
1538열공합시닷3/13/201512396중계서버 질문드립니다 [1]
1537김재영3/11/201513482asp.net의 빌드 유휴시간 이후의 리빌드 작업을 컨트롤 할 수 있습니까? [2]
1536솔솔3/9/201511921mac address얻으려고 하는데요.. [1]
1535Stud...3/4/201512488C#엔 MFC의 theApp 과 같은 기능을 하는것이 없나요? [3]
1534김동진3/4/201511944C#에서 BHO로 Windows Explorer에서의 동작이 가능할지요 [2]
1533김동현3/3/201512257컴파일 된 프로그램에 코드 삽입(?) 관련입니다. [1]
1532반가워요3/3/201514886C# 소켓연결에 packet송수신... [8]
1531강현수3/2/201513479C# com 등록 시 GUID 변경 관련 문의 [1]
1529김민규2/15/201513354C++ 64bit/32bit [3]파일 다운로드1
1528김개똥2/14/201510853좀 관련없는 질문이지만, 정말 답답하고 찾는데 명확한 해답 찾지못해 질문 올립니다. <Windows 사용자 인증> [1]
1527방문자1/27/201511875System Timer의 Tick에서 Backgroundworker를 호출하면 스레드 문제가 있을까요? [1]
... 46  47  48  49  50  [51]  52  53  54  55  56  57  58  59  60  ...