【问题标题】:Third party .NET module not listed in the output of the "lm" command“lm”命令的输出中未列出第三方 .NET 模块
【发布时间】:2016-11-18 15:20:10
【问题描述】:

我创建了一个使用 log4net 写入日志的示例 .net 应用程序。它只是用来测试 log4net 库。

但是当我通过 Windows 任务管理器创建故障转储文件,然后使用 WinDbg 打开它时,输入命令“lm”后找不到模块“log4net”。

为什么命令“lm”没有列出dll“log4net.dll”?

这是 WinDbg 的输出:

0:009> lmf
start             end                 module name
00000000`003e0000 00000000`003e8000   test_log4net C:\wangzhengzhang\Demo\demo\test_csharp\test_log4net\bin\Debug\test_log4net.exe
00007fff`1a260000 00007fff`1b748000   mscorlib_ni C:\WINDOWS\assembly\NativeImages_v4.0.30319_64\mscorlib\e96b4590c579d08edc2e60cc3e5ae997\mscorlib.ni.dll
00007fff`1b750000 00007fff`1c136000   clr      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
00007fff`1c380000 00007fff`1c48e000   clrjit   C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clrjit.dll
00007fff`1c490000 00007fff`1c587000   MSVCR120_CLR0400 C:\WINDOWS\SYSTEM32\MSVCR120_CLR0400.dll
00007fff`1c590000 00007fff`1c62d000   mscoreei C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscoreei.dll
00007fff`1c630000 00007fff`1c696000   MSCOREE  C:\WINDOWS\SYSTEM32\MSCOREE.DLL
00007fff`2e590000 00007fff`2e59a000   VERSION  C:\WINDOWS\SYSTEM32\VERSION.dll
00007fff`30cc0000 00007fff`30cf3000   rsaenh   C:\WINDOWS\system32\rsaenh.dll
00007fff`30db0000 00007fff`30dc7000   CRYPTSP  C:\WINDOWS\SYSTEM32\CRYPTSP.dll
00007fff`30dd0000 00007fff`30ddb000   CRYPTBASE C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
00007fff`31280000 00007fff`312ab000   bcrypt   C:\WINDOWS\SYSTEM32\bcrypt.dll
00007fff`31340000 00007fff`3134f000   kernel_appcore C:\WINDOWS\System32\kernel.appcore.dll
00007fff`313d0000 00007fff`3146c000   msvcp_win C:\WINDOWS\System32\msvcp_win.dll
00007fff`31470000 00007fff`31565000   ucrtbase C:\WINDOWS\System32\ucrtbase.dll
00007fff`317f0000 00007fff`3180e000   win32u   C:\WINDOWS\System32\win32u.dll
00007fff`318c0000 00007fff`31a42000   gdi32full C:\WINDOWS\System32\gdi32full.dll
00007fff`32190000 00007fff`323ad000   KERNELBASE C:\WINDOWS\System32\KERNELBASE.dll
00007fff`323b0000 00007fff`3241a000   bcryptPrimitives C:\WINDOWS\System32\bcryptPrimitives.dll
00007fff`32490000 00007fff`324e9000   sechost  C:\WINDOWS\System32\sechost.dll
00007fff`324f0000 00007fff`3251e000   IMM32    C:\WINDOWS\System32\IMM32.DLL
00007fff`32730000 00007fff`32764000   GDI32    C:\WINDOWS\System32\GDI32.dll
00007fff`32770000 00007fff`3282f000   OLEAUT32 C:\WINDOWS\System32\OLEAUT32.dll
00007fff`32830000 00007fff`32af7000   combase  C:\WINDOWS\System32\combase.dll
00007fff`34500000 00007fff`34665000   USER32   C:\WINDOWS\System32\USER32.dll
00007fff`34670000 00007fff`34791000   RPCRT4   C:\WINDOWS\System32\RPCRT4.dll
00007fff`347b0000 00007fff`3485b000   KERNEL32 C:\WINDOWS\System32\KERNEL32.dll
00007fff`34860000 00007fff`348fe000   msvcrt   C:\WINDOWS\System32\msvcrt.dll
00007fff`34910000 00007fff`349b2000   ADVAPI32 C:\WINDOWS\System32\ADVAPI32.dll
00007fff`34b60000 00007fff`34bb2000   SHLWAPI  C:\WINDOWS\System32\SHLWAPI.dll
00007fff`34d30000 00007fff`34e67000   ole32    C:\WINDOWS\System32\ole32.dll
00007fff`34ee0000 00007fff`350b1000   ntdll    C:\WINDOWS\SYSTEM32\ntdll.dll

【问题讨论】:

  • 在您使用 dmp 之前是否执行了 Log4net 命令?否则 dll 并没有实际加载,你在 dmp 中看不到它
  • magicandre,是的,Log4Net命令执行完毕。

标签: .net windbg


【解决方案1】:

这是因为操作系统加载器不再加载托管模块。 CLR 现在以自定义方式映射这些,无需操作系统帮助。使用!sos.dumpdomain 查看托管模块。

【讨论】:

  • 但还有一个问题是为什么 DLL "System.Data.dll" 会与命令 "lm" 一起显示?这不是托管模块吗?
  • 您介意添加版本和日期吗?
  • 史蒂夫,你知道改变的原因吗?即使没有 .NET 的 SOS 扩展帮助,看到它们列出来也很方便,并且可以快速了解进程中发生的事情。我也猜想这种新行为会破坏一些现有的脚本。
  • 认为此更改是在 .NET 4.0 中引入的,我怀疑原因是为了促进进程内并行执行。我很久以前就读到过这个,现在我发现很难找到权威的答案。
  • @ThomasWeller,Steve Johnson,有一个变化是它只针对 x64 进程而变化吗?因为我在 x86 上看不到这种行为,只有在 x64 上。
猜你喜欢
  • 2019-05-18
  • 2021-08-25
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2018-10-09
相关资源
最近更新 更多