// // Symbols // private PdbSymbolReader OpenAssociatedSymbolFile(string peFilePath, PEReader peReader) { string pdbFileName = null; BlobContentId pdbContentId = default; foreach (DebugDirectoryEntry debugEntry in peReader.ReadDebugDirectory()) { if (debugEntry.Type != DebugDirectoryEntryType.CodeView) { continue; } CodeViewDebugDirectoryData debugDirectoryData = peReader.ReadCodeViewDebugDirectoryData(debugEntry); string candidatePath = debugDirectoryData.Path; if (!Path.IsPathRooted(candidatePath) || !File.Exists(candidatePath)) { // Also check next to the PE file candidatePath = Path.Combine(Path.GetDirectoryName(peFilePath), Path.GetFileName(candidatePath)); if (!File.Exists(candidatePath)) { continue; } } pdbFileName = candidatePath; pdbContentId = new BlobContentId(debugDirectoryData.Guid, debugEntry.Stamp); break; } if (pdbFileName == null) { return(null); } // Try to open the symbol file as portable pdb first PdbSymbolReader reader = PortablePdbSymbolReader.TryOpen(pdbFileName, GetMetadataStringDecoder(), pdbContentId); if (reader == null) { // Fallback to the diasymreader for non-portable pdbs reader = UnmanagedPdbSymbolReader.TryOpenSymbolReaderForMetadataFile(peFilePath, Path.GetDirectoryName(pdbFileName)); } return(reader); }
private PdbSymbolReader OpenAssociatedSymbolFile(string peFilePath, PEReader peReader) { // Assume that the .pdb file is next to the binary var pdbFilename = Path.ChangeExtension(peFilePath, ".pdb"); string searchPath = ""; if (!File.Exists(pdbFilename)) { pdbFilename = null; // If the file doesn't exist, try the path specified in the CodeView section of the image foreach (DebugDirectoryEntry debugEntry in peReader.ReadDebugDirectory()) { if (debugEntry.Type != DebugDirectoryEntryType.CodeView) { continue; } string candidateFileName = peReader.ReadCodeViewDebugDirectoryData(debugEntry).Path; if (Path.IsPathRooted(candidateFileName) && File.Exists(candidateFileName)) { pdbFilename = candidateFileName; searchPath = Path.GetDirectoryName(pdbFilename); break; } } if (pdbFilename == null) { return(null); } } // Try to open the symbol file as portable pdb first PdbSymbolReader reader = PortablePdbSymbolReader.TryOpen(pdbFilename, MetadataHelper.GetMetadataStringDecoder()); if (reader == null) { // Fallback to the diasymreader for non-portable pdbs reader = UnmanagedPdbSymbolReader.TryOpenSymbolReaderForMetadataFile(peFilePath, searchPath); } return(reader); }
// // Symbols // private PdbSymbolReader OpenAssociatedSymbolFile(string peFilePath) { // Assume that the .pdb file is next to the binary var pdbFilename = Path.ChangeExtension(peFilePath, ".pdb"); if (!File.Exists(pdbFilename)) { return(null); } // Try to open the symbol file as portable pdb first PdbSymbolReader reader = PortablePdbSymbolReader.TryOpen(pdbFilename, GetMetadataStringDecoder()); if (reader == null) { // Fallback to the diasymreader for non-portable pdbs reader = UnmanagedPdbSymbolReader.TryOpenSymbolReaderForMetadataFile(peFilePath); } return(reader); }
// // Symbols // private void InitializeSymbolReader(ModuleData moduleData) { // Assume that the .pdb file is next to the binary var pdbFilename = Path.ChangeExtension(moduleData.FilePath, ".pdb"); if (!File.Exists(pdbFilename)) { return; } // Try to open the symbol file as portable pdb first PdbSymbolReader reader = PortablePdbSymbolReader.TryOpen(pdbFilename, GetMetadataStringDecoder()); if (reader == null) { // Fallback to the diasymreader for non-portable pdbs reader = UnmanagedPdbSymbolReader.TryOpenSymbolReaderForMetadataFile(moduleData.FilePath); } moduleData.PdbReader = reader; }