我正在尝试调试dll版本和路径的问题。
我有一个转储,它显示了lmfsm
的输出,该输出没有显示几个dll的路径。其中一些dll是特定于应用程序的,因此我知道它们应该与MainEXE
来自同一文件夹,但我不确定其他文件。
没有显示dll present in same dir as main exe
(dllPresentInSameDirAsMainExe.dll)和dll coming from gac
(dll_from_gac.dll)的路径。因此,正在为我本地System.IO.COmpression.dll
文件夹中存在的MainEXE
选择哪个dll。
0:000> lmfsm
00000000`00220000 00000000`00228000 MainEXE D:\ABCPATH\MainEXEPkg.Code.1.0.0.20200323.1\MainEXE.exe
00000000`1aab0000 00000000`1ac3c000 dllPresentInSameDirAsMainExe dllPresentInSameDirAsMainExe.dll
00000000`1db50000 00000000`1dbcc000 dll_from_gac Dll.From.GAC.dll
00000000`20350000 00000000`2036e000 System_IO_Compression System.IO.Compression.dll
00007ffb`d0250000 00007ffb`d025e000 System_IO_Compression_FileSystem_ni C:\Windows\assembly\NativeImages_v4.0.30319_64\System.IO.Cf61e09c5#\c4e0a673a512f8626f9b499f8574dc90\System.IO.Compression.FileSystem.ni.dll
00007ffb`d7700000 00007ffb`d8344000 System_ni C:\Windows\assembly\NativeImages_v4.0.30319_64\System\66a8a818dfb2a81d684cd89cd3b83a80\System.ni.dll
因此,如何查找进程转储中加载的System.IO.Compression.dll
的路径?
WinDbg帮助说:
f
显示完整的图像路径。 (除非发出了.reload -s命令,否则此路径始终与初始加载通知中显示的路径匹配。)使用f时,不会显示符号类型信息。
事实上,.reload -s
似乎可以解决问题:
0:000> lmf
start end module name
00f50000 00f58000 DebuggingEnumDefinition DebuggingEnumDefinition.exe
71640000 71692000 MSCOREE C:\WINDOWS\SysWOW64\MSCOREE.DLL
74e50000 74eef000 apphelp C:\WINDOWS\SysWOW64\apphelp.dll
751a0000 7539e000 KERNELBASE C:\WINDOWS\SysWOW64\KERNELBASE.dll
759a0000 75a80000 KERNEL32 C:\WINDOWS\SysWOW64\KERNEL32.dll
777c0000 7795a000 ntdll ntdll.dll
0:000> .reload -s
......
0:000> lmf
start end module name
00f50000 00f58000 DebuggingEnumDefinition C:\...\bin\Debug\DebuggingEnumDefinition.exe
71640000 71692000 MSCOREE C:\WINDOWS\SYSTEM32\MSCOREE.DLL
74e50000 74eef000 apphelp C:\WINDOWS\SYSTEM32\apphelp.dll
751a0000 7539e000 KERNELBASE C:\WINDOWS\System32\KERNELBASE.dll
759a0000 75a80000 KERNEL32 C:\WINDOWS\System32\KERNEL32.dll
777c0000 7795a000 ntdll C:\WINDOWS\SYSTEM32\ntdll.dll