【发布时间】:2020-01-13 18:34:37
【问题描述】:
我必须从 .pdb 和 .dll 文件中提取 PDB 签名。
这是我用来从 .pdb 文件中提取它的代码。不幸的是,我还没有找到从 DLL 中提取它的类似方法。
public static string GetPdbSignature(string pdbFilePath)
{
using (var pdbFileStream = File.OpenRead(pdbFilePath))
{
var metadataProvider = MetadataReaderProvider.FromPortablePdbStream(pdbFileStream);
var metadataReader = metadataProvider.GetMetadataReader();
var id = new BlobContentId(metadataReader.DebugMetadataHeader.Id);
return $"{id.Guid.ToString("N")}ffffff";
}
}
我发现PeNet nuget 包可用于执行提取,但我更愿意在不安装外部依赖项的情况下实现这一点。
此外,我设法使用 dotPeek (screen) 找到了所需的数据,但由于我需要以编程方式解决问题,它也不能解决我的问题。
我很想知道如何解决这个问题。通过使用一些内置的 dotnet 机制或通过一些智能低级字节提取。
【问题讨论】:
-
"但由于我需要以编程方式解决问题,它也不能解决我的问题。"您可以查看反射在代码中执行此操作。首先查看 Assembly.Load
标签: c# debugging dll pdb portable-executable