public void TryResolveSymbolsForModule(RemoteProcess.Module module) { Contract.Requires(module != null); var name = module.Name.ToLower(); bool isBlacklisted; lock (symbolReaders) { isBlacklisted = moduleBlacklist.Contains(name); } if (!isBlacklisted) { try { SymbolReader.TryResolveSymbolsForModule(module, SymbolSearchPath); } catch { lock (symbolReaders) { moduleBlacklist.Add(name); File.WriteAllLines( Path.Combine(SymbolCachePath, BlackListFile), moduleBlacklist.ToArray() ); } } } }
public static void TryResolveSymbolsForModule(RemoteProcess.Module module, string searchPath) { Contract.Requires(module != null); using (var diaSource = new ComDisposableWrapper <DiaSource>(new DiaSource())) { diaSource.Interface.loadDataForExe(module.Path, searchPath, null); } }
public static SymbolReader FromModule(RemoteProcess.Module module, string searchPath) { Contract.Requires(module != null); var reader = new SymbolReader(searchPath); reader.diaSource.Interface.loadDataForExe(module.Path, searchPath, null); reader.CreateSession(); return(reader); }
public SymbolReader GetSymbolsForModule(RemoteProcess.Module module) { Contract.Requires(module != null); var name = module.Name.ToLower(); lock (symbolReaders) { SymbolReader reader; if (!symbolReaders.TryGetValue(name, out reader)) { name = Path.ChangeExtension(name, ".pdb"); symbolReaders.TryGetValue(name, out reader); } return(reader); } }
public string GetSymbolString(IntPtr address, RemoteProcess.Module module) { Contract.Requires(module != null); var rva = address.Sub(module.Start); IDiaSymbol diaSymbol; diaSession.Interface.findSymbolByRVA((uint)rva.ToInt32(), SymTagEnum.SymTagNull, out diaSymbol); if (diaSymbol != null) { using (var symbol = new ComDisposableWrapper <IDiaSymbol>(diaSymbol)) { var sb = new StringBuilder(); ReadSymbol(diaSymbol, sb); return(sb.ToString()); } } return(null); }
public void LoadSymbolsForModule(RemoteProcess.Module module) { Contract.Requires(module != null); var moduleName = module.Name.ToLower(); bool createNew; lock (symbolReaders) { createNew = !symbolReaders.ContainsKey(moduleName); } if (createNew) { var reader = SymbolReader.FromModule(module, SymbolSearchPath); lock (symbolReaders) { symbolReaders[moduleName] = reader; } } }