c# -提取clr.dll等应用程序

本文关键字:应用程序 dll clr 提取 | 更新日期: 2023-09-27 18:11:28

我试图从另一个用c#编写的软件的应用程序中提取clr.dll和mscorwks.dll。我的目的是收集内存转储分析所需的所有文件,即使分析是在脱机机器上完成的。

到目前为止我所尝试的是;

var currentAssembly = Assembly.LoadFrom(process.MainModule.FileName);//with the given process;
var assemblyList = currentAssembly.GetReferencedAssemblies().ToList();
var manifestList = currentAssembly.GetManifestResourceNames();

虽然GetReferencedAssemblies()没有给我clr.dll或mscorwks.dll,但只有mscorlib.dll和GetManifestResourceNames()给我只是一个在软件中使用的图像文件。

有人有过这样的经历吗?我是否错过了一些东西来获得我想要的dll ?

感谢您的关注!

问候,

Erdi

c# -提取clr.dll等应用程序

我想实现你想做的最好的方法是使用Microsoft.Diagnostics.Runtime (nuget-package)和它的DataTarget类。这允许您附加到一个进程,并从该进程读取任何信息。

对于迭代所有加载的模块(即托管和非托管),您可以这样做:

    using (dt = DataTarget.AttachToProcess(proc.Id, 100, AttachFlag.Passive))
    {
        // since 4.0 we can possibly find more than one runtime (side-by-side CLRs) in one AppDomain...
        if (dt.ClrVersions.Count > 0)
        {
            foreach (var clr in dt.ClrVersions)
            {
                Console.WriteLine(clr.Version + " " + clr.Flavor.ToString());
            }
        }
    }

其中procSystem.Diagnostics.Process的一个实例。除了通过ClrVersions使用快捷方式,您还可以枚举所有模块(通过调用EnumerateModules)