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
我想实现你想做的最好的方法是使用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());
}
}
}
其中proc
是System.Diagnostics.Process
的一个实例。除了通过ClrVersions
使用快捷方式,您还可以枚举所有模块(通过调用EnumerateModules
)