1

TL;왜 WinDBG가 덤프에 일치하지 않는 FileVersion을 표시합니까?

DR 왜 WinDBG에서 lmv 디스플레이 두 버전 정보 필드 (내가 아는 다른 도구의이 작업을 수행하지 않을 때)와 상황에서이 필드는 다를 수 있습니까?


배경 : 응용 프로그램의 라이브 덤프 (교착 상태에서 발생)가 있습니다. 기호가 올바르게로드되고 Microsoft의 pdm.dll (vbscript 엔진에 사용되는 "프로세스 디버그 관리자")의 교착 상태를 추적 할 수있었습니다.

나는 다음이 DLL의 버전은 생산 현장에서 세션에로드 된 확인하고 싶어서 : 당신이 볼 수 있듯이

0:000> lmv m pdm 
start end  module name 
51860000 518b8000 pdm  # (pdb symbols)   d:\symcache\pdm.pdb\7BE601EDE9234816B72B49DA4A25DF042\pdm.pdb 
    Loaded symbol image file: pdm.dll 
    Image path: C:\Program Files (x86)\Common Files\Microsoft Shared\VS7DEBUG\pdm.dll 
    Image name: pdm.dll 
    Timestamp:  Tue Jul 29 16:46:11 2008 (488F2D33) 
    CheckSum:   000663E0 
    ImageSize:  00058000 
?? File version:  9.0.30729.1 
?? Product version: 9.0.30729.1 
    File flags:  0 (Mask 3F) 
    File OS:   4 Unknown Win32 
    File type:  2.0 Dll 
    File date:  00000000.00000000 
    Translations:  0409.04b0 
    CompanyName:  Microsoft Corporation 
    ProductName:  Microsoft® Visual Studio .NET 
    InternalName:  pdm.dll 
    OriginalFilename: pdm.dll 
?? ProductVersion: 7.10.3077 
?? FileVersion:  7.10.3077 
    FileDescription: Process Debug Manager 
    LegalCopyright: Copyright© Microsoft Corporation. All rights reserved. 

는 파일 및 제품 버전이 두 번 표시되지만,이에 일치하지 않습니다 멍청한 놈!

나는 실행 iexplore를 프로세스 (분명히, 타임 스탬프 및 체크섬을 참조!) 같은 파일 내 컴퓨터에서 검사를 통과 할 때 :

0:043> lmv m pdm 
start end  module name 
3efa0000 3eff8000 pdm  (pdb symbols)   c:\windows\symbols\martin-cache\pdm.pdb\415D0A165EB24613BC01CE516512062C2\pdm.pdb 
    Loaded symbol image file: C:\Program Files (x86)\Internet Explorer\pdm.dll 
    Image path: C:\Program Files (x86)\Internet Explorer\pdm.dll 
    Image name: pdm.dll 
    Timestamp:  Tue Jul 29 16:46:11 2008 (488F2D33) 
    CheckSum:   000663E0 
    ImageSize:  00058000 
    File version:  9.0.30729.1 
    Product version: 9.0.30729.1 
    File flags:  0 (Mask 3F) 
    File OS:   4 Unknown Win32 
    File type:  2.0 Dll 
    File date:  00000000.00000000 
    Translations:  0409.04b0 
    CompanyName:  Microsoft Corporation 
    ProductName:  Microsoft® Visual Studio® 2008 
    InternalName:  pdm.dll 
    OriginalFilename: pdm.dll 
    ProductVersion: 9.0.30729.1 
    FileVersion:  9.0.30729.1 built by: SP 
    FileDescription: Process Debug Manager 
    LegalCopyright: © Microsoft Corporation. All rights reserved. 

버전 정보를 정기적으로 일치까지.

답변

2

LMV는 표시 리소스 파일에 정의 된 문자열,

enter image description here

파일/제품 버전 이름의 두 세트 일부 공간을 제외하고 같은 공통가 왜 모르겠어요.

0:041> lmv m kernel32 
start end  module name 
753e0000 754f0000 kernel32 (deferred)    
    Image path: C:\Windows\SysWOW64\kernel32.dll 
    Image name: kernel32.dll 
    Timestamp:  Fri Aug 02 03:53:25 2013 (51FB1115) 
    CheckSum:   00111A9F 
    ImageSize:  00110000 
    File version:  6.1.7601.18229 
    Product version: 6.1.7601.18229 
    File flags:  0 (Mask 3F) 
    File OS:   40004 NT Win32 
    File type:  2.0 Dll 
    File date:  00000000.00000000 
    Translations:  0409.04b0 
    CompanyName:  Microsoft Corporation 
    ProductName:  Microsoft® Windows® Operating System 
    InternalName:  kernel32 
    OriginalFilename: kernel32 
    ProductVersion: 6.1.7601.18229 
    FileVersion:  6.1.7601.18229 (win7sp1_gdr.130801-1533) 

두 가지 dll이있는 경우 이미지 파일 경로를 확인하십시오.

Image path: C:\Program Files (x86)\Common Files\Microsoft Shared\VS7DEBUG\ 

Image path: C:\Program Files (x86)\Internet Explorer 

그들은 리소스 섹션에서 다른 문자열이 있어야합니다, WinDbg는 아무것도 할 수 있지만, 그것을 표시 할 수 없습니다. 타임 스탬프가 동일하기 때문에 하나가 변경되었을 수 있습니다.

+0

아. 그래서 첫 번째 버전은'FILEVERSION'의 것이고 두번째 버전은'BLOCK "StringFileInfo"-'VALUE "FileVersion"입니다. 나는 그것을 놓치지 않는 약간의 장님이었다. : -/ –

+0

변조와 관련하여 - * CheckSum *을 변조 할 수 있습니까? (그 이유는 동일하기 때문입니다.) –

+0

그 중 하나는 다른 하나의 사본이기 때문에 동일한 체크섬, 크기 및 시간을 말한 다음 하나의 버전을 ProductName과 함께 변경해야합니다. –