zoukankan      html  css  js  c++  java
  • CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应

    大家都知道,在调试托管代码时,一定会加载到sos/clr/mscorwks/mscordacwks这些动态库,才能够很好的完成我们的调试工作,那么他们的版本对应关系是怎样的呢,特别是clr.dll/mscorwks.dll有什么关系呢?

    clr是通用语言运行时库,对应的就是clr.dll/mscorwks.dll,在clr发展过程中,文件名发生了变化,他们的版本对应关系如下:

    .NET framework 版本CLR 版本CLR 文件名
    1.1 1.1 mscorwks.dll
    2.0 2.0 mscorwks.dll
    3.0 2.0 mscorwks.dll
    3.5 2.0 mscorwks.dll
    4.0 4.0 clr.dll
    4.5 4.0 clr.dll

    我们在进行托管代码调试时,还会使用到sos.dll和mscordacwks.dll这两个动态库:

    • SOS.dll
      SOS 调试扩展 (SOS.dll) 通过提供有关内部公共语言运行时 (CLR) 环境的信息,帮助你在 Visual Studio 和 Windows 调试器 (WinDbg.exe) 中调试托管程序。
    • mscordacwks.dll
      这是进行调试的数据访问组件 (DAC) 。SOS和CLR调试器使用 Data Access Component (DAC)来实现进程外调试,DAC原则上可以视做CLR执行引擎的子集。它能用在转储文件上,甚至是在CLR未安装的机器上面工作,其实现主要包括一组宏和模板,结合执行引擎代码的条件编译。当编译runtime时,clr.dll和mscordacwks.dll同时生成。为了检索对象,DAC可以读取其内存,获取mscordacwks中VM代码的输入。 然后,它可以在宿主机中运行相应的函数来计算有关托管结构所需的信息,并将最终结果返回给调试器。
      请注意。DAC需要读取对象进程的内存。调试进程和调试对象进程是独立的,地址空间也是独立的。因此需要清楚的区分对象内存和宿主(调试器)内存。在宿主进程中使用目标地址结果无法预料,通常情况下是错误的结果。当使用DAC检索目标内存时,在正确的地址空间中使用目标地址时十分重要的,此外,有时目标地址严格用作数据,在这种情况下,使用主机地址同样不正确,比如,要显示一个托管函数的信息,可能需要列出开始的地址,地址大小。当在VM文件夹下编辑DAC可能运行的代码时,需要正确的选择宿主地址或者目标进程地址。

    请注意  对于所有版本的.NET Framework 中,该 DAC 的文件名是 mscordacwks.dll,,SOS 调试扩展的文件名为 sos.dll。

    若要验证 mscordacwks.dll 版本与应用程序使用的 clr 的版本相匹配,请输入以下命令以显示有关已加载的 CLR 模块信息之一:

    • lmv mclr (适用于 CLR 版本 4.0)
    • lmv mscorwks (适用于版本 1.0 或 2.0 CLR)
  • 相关阅读:
    php实现上传图片保存到数据库的方法
    支付宝集成——如何在回调地址中使用自定义参数
    QQ音乐的各种相关API
    xampp默认mysql密码设置,修改mysql的默认空密码
    node.js 初体验
    php调用empty出现错误Can't use function return value in write context
    ecshop数据库操作函数
    ecshop中$user对象
    为什么我的联想打印机M7450F换完墨粉之后打印机显示请更换墨粉盒?这是我的墨盒第一次灌粉·、
    PHP中获取当前页面的完整URL
  • 原文地址:https://www.cnblogs.com/yilang/p/12015091.html
Copyright © 2011-2022 走看看