1

TL; DR爲什麼WinDBG在轉儲中顯示不匹配的FileVersion?

爲什麼WinDBG的lmv顯示版本二信息字段(當沒有其他工具,我知道做到這一點),以及在何種情況下可以在這些領域有什麼不同?


背景:我有一個活的轉儲(從死鎖)我們的應用程序。符號加載正確,我能夠追溯到微軟的pdm.dll(用於我們的vbscript引擎的「Process Debug Manager」)的死鎖。

我當時就想檢查此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一起更改。 –

相關問題