windbg - 덤프 파일로부터 닷넷 버전 확인하는 방법
검색해 보면 lm vm 명령어를 이용해 "File version"으로부터 확인할 수 있다고 나옵니다.
0:000> lm vm clr
Browse full module list
start end module name
00007ffa`1fa00000 00007ffa`203e3000 clr (pdb symbols) e:\symbols\clr.pdb\C254072B1820467997506C2BCE7057162\clr.pdb
Loaded symbol image file: clr.dll
Image path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Image name: clr.dll
Browse all global symbols functions data
Timestamp: Fri Apr 21 12:52:57 2017 (58F98219)
CheckSum: 009E9CA9
ImageSize: 009E3000
File version: 4.6.1649.1
Product version: 4.0.30319.1
File flags: 8 (Mask 3F) Private
File OS: 4 Unknown Win32
File type: 2.0 Dll
File date: 00000000.00000000
Translations: 0409.04b0
CompanyName: Microsoft Corporation
ProductName: Microsoft® .NET Framework
InternalName: clr.dll
OriginalFilename: clr.dll
ProductVersion: 4.6.1649.1
FileVersion: 4.6.1649.1 built by: NETFXREL3STAGE
PrivateBuild: DDBLD299E
FileDescription: Microsoft .NET Runtime Common Language Runtime - WorkStation
LegalCopyright: ⓒ Microsoft Corporation. All rights reserved.
Comments: Flavor=Retail
그런데, 제가 가지고 있는 Windows 2008 테스트 서버의 clr.dll 버전을 확인해 보면 닷넷 4.5가 설치되었는데도 File version이 4.0.30319.18444로 나오는 걸로 봐서 4.0.xxxxx.xxxxx인 경우에는 반드시 메모리 덤프를 뜬 PC의 환경을 한번 더 검사해 볼 것을 권장합니다.
참고로 어차피 물어보는 경우라면 그냥 다음의 정보에 따라,
How to: Determine Which .NET Framework Versions Are Installed
; https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
.NET Framework Versions and Dependencies
; https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/versions-and-dependencies
레지스트리 값을 묻는 것이 가장 정확합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
참고로 sos.dll을 windbg에서 로드했다면 !EEVersion으로 출력되는 정보를 통해서도 단서를 찾을 수 있습니다.
0:000> !eeversion
4.6.1649.1 free
Server mode with 32 gc heaps
SOS Version: 4.6.1649.1 retail build
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]