성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>windbg - 64비트 운영체제에서 작업 관리자로 뜬 32비트 프로세스의 덤프를 sos로 디버깅하는 방법</h1> <p> 예전 글에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > windbg - SOS does not support the current target architecture. ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11262'>https://www.sysnet.pe.kr/2/0/11262</a> </pre> <br /> 64비트 운영체제 환경에서 "작업 관리자(Task Manager)"를 이용해 32비트 프로세스의 덤프를 뜨는 경우, sos.dll 로딩이 안 된다는 설명을 했었습니다. 그러다, <a target='tab' href='https://www.sysnet.pe.kr/2/0/13216'>최근에 쓴 글</a>에서 "<a target='tab' href='https://learn.microsoft.com/en-us/windows/win32/winprog64/debugging-wow64'>wow64exts.sw</a>" 명령어를 실습하는 중에 문득 그것이 가능하지 않을까... 하는 생각이 들었는데요, 실제로 wow64exts.sw 명령어 후에는 해당 덤프에 대해 sos 확장이 잘 로드가 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:000> <span style='color: blue; font-weight: bold'>!wow64exts.sw</span> Switched to Guest (WoW) mode 0:000:x86> <span style='color: blue; font-weight: bold'>.loadby sos clr</span> 0:000:x86> <span style='color: blue; font-weight: bold'>.chain</span> Extension DLL search Path: C:\Program Files...[생략]...\AppData\Local\Microsoft\WindowsApps Extension DLL chain: <span style='color: blue; font-weight: bold'>C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll</span>: image 4.8.9105.0, API 1.0.0, built Thu Sep 15 09:28:04 2022 [path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll] ...[생략]... ntsdexts: image 10.0.22000.194, API 1.0.0, [path: C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\WINXP\ntsdexts.dll] </pre> <br /> 하지만, sos 명령어는 동작하지 않습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:000:x86> <span style='color: blue; font-weight: bold'>!clrstack</span> SOS does not support the current target architecture (8664). 0:000:x86> <span style='color: blue; font-weight: bold'>!name2ee</span> SOS does not support the current target architecture (8664). </pre> <br /> 그런데, 이런 간극을 메워주는 확장을 작성해 공개한 것이 있습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SOS does not support the current target architecture ; <a target='tab' href='https://stackoverflow.com/questions/16422577/sos-does-not-support-the-current-target-architecture'>https://stackoverflow.com/questions/16422577/sos-does-not-support-the-current-target-architecture</a> poizan42/soswow64 ; <a target='tab' href='https://github.com/poizan42/soswow64'>https://github.com/poizan42/soswow64</a> soswow64.zip ; <a target='tab' href='https://github.com/poizan42/soswow64/releases/download/v1.0.4/soswow64.zip'>https://github.com/poizan42/soswow64/releases/download/v1.0.4/soswow64.zip</a> </pre> <br /> 그래서 이 확장을 추가로 로드하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:000:x86> <span style='color: blue; font-weight: bold'>.load c:\temp\soswow64.dll</span> Successfully hooked IDebugControl::GetExecutingProcessorType. Failed patching DbgEng!X86MachineInfo::ConvertCanonContextToTarget, stack related commands may not work correctly. </pre> <br /> Windows 11의 제 환경에서는 "Failed ..." 오류가 발생하긴 하지만 그런대로 대부분의 명령어는 정상적으로 동작을 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:000:x86> <span style='color: blue; font-weight: bold'>!clrstack</span> OS Thread Id: 0xea88 (0) Child SP IP Call Site 006fedec 0000002b [InlinedCallFrame: 006fedec] 006fede8 71be7821 DomainNeutralILStubClass.IL_STUB_PInvoke(Microsoft.Win32.SafeHandles.SafeFileHandle, Byte*, Int32, Int32 ByRef, IntPtr) 006fedec 7231b19a [InlinedCallFrame: 006fedec] Microsoft.Win32.Win32Native.ReadFile(Microsoft.Win32.SafeHandles.SafeFileHandle, Byte*, Int32, Int32 ByRef, IntPtr) 006fee50 7231b19a System.IO.__ConsoleStream.ReadFileNative(Microsoft.Win32.SafeHandles.SafeFileHandle, Byte[], Int32, Int32, Boolean, Boolean, Int32 ByRef) 006fee80 7231b0a7 System.IO.__ConsoleStream.Read(Byte[], Int32, Int32) 006feea0 71b7a669 System.IO.StreamReader.ReadBuffer() 006feeb0 71b7aa52 System.IO.StreamReader.ReadLine() 006feecc 724502e6 System.IO.TextReader+SyncTextReader.ReadLine() 006feedc 722b5a85 System.Console.ReadLine() 006feee4 02660896 *** WARNING: Unable to verify checksum for ConsoleApp1.exe Program.Main(System.String[]) [C:\temp\ConsoleApp1\ConsoleApp1\Program.cs @ 9] 006ff09c 735b2526 [GCFrame: 006ff09c] 0:000:x86> <span style='color: blue; font-weight: bold'>!name2ee ConsoleApp1!Program.Main</span> Module: <span style='color: blue; font-weight: bold'>00d24044</span> Assembly: ConsoleApp1.exe Token: 06000001 MethodDesc: 00d24d54 Name: Program.Main(System.String[]) <span style='color: blue; font-weight: bold'>JITTED Code Address: 02660848</span> 0:000:x86> <span style='color: blue; font-weight: bold'>!<a target='tab' href='https://www.sysnet.pe.kr/2/0/10943'>savemodule</a> 0x00d24044 c:\temp\test.dll </span> 3 sections in file section 0 - VA=2000, VASize=7bc, FileAddr=200, FileSize=800 section 1 - VA=4000, VASize=5bc, FileAddr=a00, FileSize=600 section 2 - VA=6000, VASize=c, FileAddr=1000, FileSize=200 </pre> <br /> 위의 실습은, x86 버전의 windbg로 해야 하고, 만약 Preview AppStore 버전을 사용한다면 덤프 파일 로딩 시 "Target architecture"를 "Autodetect"가 아닌 명시적으로 "X86"을 지정해야 합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로 이전 글(<a target='tab' href='https://www.sysnet.pe.kr/2/0/11262'>https://www.sysnet.pe.kr/2/0/11262</a>)에서 작업 관리자 대신 <a target='tab' href='Process Explorer'>Process Explorer</a>를 사용하라고 했는데요, "<a target='tab' href='https://stackoverflow.com/questions/16422577/sos-does-not-support-the-current-target-architecture'>SOS does not support the current target architecture</a>" Q&A에 더 나은 방법을 제시하는 덧글이 있습니다.<br /> <br /> 바로, ^^ 32비트 Task Manager를 띄워서 덤프를 뜨면 된다는 것입니다. 따라서, 다음의 경로에 있는 작업 관리자 모듈을,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\SysWOW64\taskmgr.exe </pre> <br /> 직접 실행해 덤프를 떠도 됩니다. 이로써 고객사 덤프 뜰 때 Process Explorer를 다운로드해야 한다는 부탁을 할 필요가 없어진 것입니다. ^^ 그렇긴 한데, 이제는 x86 버전의 .NET Framework 응용 프로그램을 거의 볼 일이 없으니... 너무 늦게 알아버렸군요. ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1706
(왼쪽의 숫자를 입력해야 합니다.)