Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 6개 있습니다.)
오류 유형: 412. windbg - SOS does not support the current target architecture.
; https://www.sysnet.pe.kr/2/0/11262

오류 유형: 798. WinDbg - Failed to load data access module, 0x80004002
; https://www.sysnet.pe.kr/2/0/12994

디버깅 기술: 184. windbg - 32비트 프로세스의 메모리 덤프인 경우 !peb 명령어로 나타나지 않는 환경 변수
; https://www.sysnet.pe.kr/2/0/13216

디버깅 기술: 185. windbg - 64비트 운영체제에서 작업 관리자로 뜬 32비트 프로세스의 덤프를 sos로 디버깅하는 방법
; https://www.sysnet.pe.kr/2/0/13217

디버깅 기술: 201. WinDbg - sos threads 명령어 실행 시 "Failed to request ThreadStore"
; https://www.sysnet.pe.kr/2/0/13725

오류 유형: 950. Process Explorer - 64비트 윈도우에서 32비트 프로세스의 덤프를 뜰 때 "Error writing dump file: Access is denied." 오류
; https://www.sysnet.pe.kr/2/0/13913




windbg - 64비트 운영체제에서 작업 관리자로 뜬 32비트 프로세스의 덤프를 sos로 디버깅하는 방법

예전 글에서,

windbg - SOS does not support the current target architecture.
; https://www.sysnet.pe.kr/2/0/11262

64비트 운영체제 환경에서 "작업 관리자(Task Manager)"를 이용해 32비트 프로세스의 덤프를 뜨는 경우, sos.dll 로딩이 안 된다는 설명을 했었습니다. 그러다, 최근에 쓴 글에서 "wow64exts.sw" 명령어를 실습하는 중에 문득 그것이 가능하지 않을까... 하는 생각이 들었는데요, 실제로 wow64exts.sw 명령어 후에는 해당 덤프에 대해 sos 확장이 잘 로드가 됩니다.

0:000> !wow64exts.sw
Switched to Guest (WoW) mode

0:000:x86> .loadby sos clr

0:000:x86> .chain
Extension DLL search Path:
    C:\Program Files...[생략]...\AppData\Local\Microsoft\WindowsApps
Extension DLL chain:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll: 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]

하지만, sos 명령어는 동작하지 않습니다.

0:000:x86> !clrstack
SOS does not support the current target architecture (8664).

0:000:x86> !name2ee
SOS does not support the current target architecture (8664).

그런데, 이런 간극을 메워주는 확장을 작성해 공개한 것이 있습니다. ^^

SOS does not support the current target architecture
; https://stackoverflow.com/questions/16422577/sos-does-not-support-the-current-target-architecture

poizan42/soswow64
; https://github.com/poizan42/soswow64

soswow64.zip
; https://github.com/poizan42/soswow64/releases/download/v1.0.4/soswow64.zip

그래서 이 확장을 추가로 로드하면,

0:000:x86> .load c:\temp\soswow64.dll
Successfully hooked IDebugControl::GetExecutingProcessorType.
Failed patching DbgEng!X86MachineInfo::ConvertCanonContextToTarget, stack related commands may not work correctly.

Windows 11의 제 환경에서는 "Failed ..." 오류가 발생하긴 하지만 그런대로 대부분의 명령어는 정상적으로 동작을 합니다.

0:000:x86> !clrstack
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> !name2ee ConsoleApp1!Program.Main
Module:      00d24044
Assembly:    ConsoleApp1.exe
Token:       06000001
MethodDesc:  00d24d54
Name:        Program.Main(System.String[])
JITTED Code Address: 02660848

0:000:x86> !savemodule 0x00d24044 c:\temp\test.dll 
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

위의 실습은, x86 버전의 windbg로 해야 하고, 만약 Preview AppStore 버전을 사용한다면 덤프 파일 로딩 시 "Target architecture"를 "Autodetect"가 아닌 명시적으로 "X86"을 지정해야 합니다.




참고로 이전 글(https://www.sysnet.pe.kr/2/0/11262)에서 작업 관리자 대신 Process Explorer를 사용하라고 했는데요, "SOS does not support the current target architecture" Q&A에 더 나은 방법을 제시하는 덧글이 있습니다.

바로, ^^ 32비트 Task Manager를 띄워서 덤프를 뜨면 된다는 것입니다. 따라서, 다음의 경로에 있는 작업 관리자 모듈을,

C:\Windows\SysWOW64\taskmgr.exe 

직접 실행해 덤프를 떠도 됩니다. 이로써 고객사 덤프 뜰 때 Process Explorer를 다운로드해야 한다는 부탁을 할 필요가 없어진 것입니다. ^^ 그렇긴 한데, 이제는 x86 버전의 .NET Framework 응용 프로그램을 거의 볼 일이 없으니... 너무 늦게 알아버렸군요. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 4/9/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... [136]  137  138  139  140  141  142  143  144  145  146  147  148  149  150  ...
NoWriterDateCnt.TitleFile(s)
1747정성태9/19/201432650오류 유형: 239. psexec 실행 오류 - The system cannot find the file specified.
1746정성태9/18/201428658.NET Framework: 461. .NET EXE 파일을 닷넷 프레임워크 버전에 상관없이 실행할 수 있을까요? - 두 번째 이야기 [6]파일 다운로드1
1745정성태9/17/201426978개발 환경 구성: 237. 리눅스 Integration Services 버전 업그레이드 하는 방법 [1]
1744정성태9/17/201435219.NET Framework: 460. GetTickCount / GetTickCount64와 0x7FFE0000 주솟값 [4]파일 다운로드1
1743정성태9/16/201424677오류 유형: 238. 설치 오류 - Failed to get size of pseudo bundle
1742정성태8/27/201431342개발 환경 구성: 236. Hyper-V에 설치한 리눅스 VM의 VHD 크기 늘리는 방법 [2]
1741정성태8/26/201425040.NET Framework: 459. GetModuleHandleEx로 알아보는 .NET 메서드의 DLL 모듈 관계파일 다운로드1
1740정성태8/25/201436767.NET Framework: 458. 닷넷 GC가 순환 참조를 해제할 수 있을까요? [2]파일 다운로드1
1739정성태8/24/201430467.NET Framework: 457. 교착상태(Dead-lock) 해결 방법 - Lock Leveling [2]파일 다운로드1
1738정성태8/23/201426391.NET Framework: 456. C# - CAS를 이용한 Lock 래퍼 클래스파일 다운로드1
1737정성태8/20/201422954VS.NET IDE: 93. Visual Studio 2013 동기화 문제
1736정성태8/19/201429602VC++: 79. [부연] CAS Lock 알고리즘은 과연 빠른가? [2]파일 다운로드1
1735정성태8/19/201422322.NET Framework: 455. 닷넷 사용자 정의 예외 클래스의 최소 구현 코드 - 두 번째 이야기
1734정성태8/13/201423889오류 유형: 237. Windows Media Player cannot access the file. The file might be in use, you might not have access to the computer where the file is stored, or your proxy settings might not be correct.
1733정성태8/13/201430174.NET Framework: 454. EmptyWorkingSet Win32 API를 사용하는 C# 예제파일 다운로드1
1732정성태8/13/201438901Windows: 99. INetCache 폴더가 다르게 보이는 이유
1731정성태8/11/201430862개발 환경 구성: 235. 점(.)으로 시작하는 파일명을 탐색기에서 만드는 방법
1730정성태8/11/201426169개발 환경 구성: 234. Royal TS의 터미널(Terminal) 연결에서 한글이 깨지는 현상 해결 방법
1729정성태8/11/201422009오류 유형: 236. SqlConnection - The requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly.
1728정성태8/8/201434784.NET Framework: 453. C# - 오피스 파워포인트(Powerpoint) 파일을 WinForm에서 보는 방법파일 다운로드1
1727정성태8/6/201425052오류 유형: 235. SignalR 오류 메시지 - Counter 'Messages Bus Messages Published Total' does not exist in the specified Category. [2]
1726정성태8/6/201423369오류 유형: 234. IIS Express에서 COM+ 사용 시 SecurityException - "Requested registry access is not allowed" 발생
1725정성태8/6/201425556오류 유형: 233. Visual Studio 2013 Update3 적용 후 Microsoft.VisualStudio.Web.PageInspector.Runtime 모듈에 대한 FileNotFoundException 예외 발생
1724정성태8/5/201430144.NET Framework: 452. .NET System.Threading.Thread 개체에서 Native Thread Id를 구하는 방법 - 두 번째 이야기 [1]파일 다운로드1
1723정성태7/29/201462846개발 환경 구성: 233. DirectX 9 예제 프로젝트 빌드하는 방법 [3]파일 다운로드1
1722정성태7/25/201424902오류 유형: 232. IIS 500 Internal Server Error - NTFS 암호화된 폴더에 웹 애플리케이션이 위치한 경우
... [136]  137  138  139  140  141  142  143  144  145  146  147  148  149  150  ...