Ejemplo n.º 1
0
        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()
                            );
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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;
                }
            }
        }