从DLL文件中提取PDB签名

问题描述 投票:0回答:1

我必须从。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机制或一些智能的低级字节提取。

c# debugging dll pdb portable-executable
1个回答
2
投票

我设法找到了一个官方的Microsoft程序包-Microsoft.Diagnostics.Tracing.TraceEvent,其中包含PEFile类,可以提取所需的确切数据。

public static string GetDllSignature(string dllFilePath)
{
    var peFile = new PEFile.PEFile(dllFilePath);
    peFile.GetPdbSignature(out string pdbName, out Guid pdbGuid, out int pdbAge);

    return $"{pdbGuid.ToString("N")}ffffff";
}
© www.soinside.com 2019 - 2024. All rights reserved.