Exemplo n.º 1
0
        private void AddEntry(IDiaSession session, IDiaEnumSymbolsByAddr symbolsByAddr, ulong eip, uint rva)
        {
            session.findSymbolByRVA(rva, SymTagEnum.SymTagPublicSymbol, out var symbol);
            if (symbol == null)
            {
                session.findSymbolByRVA(rva, SymTagEnum.SymTagFunction, out symbol);
                if (symbol == null)
                {
                    symbol = symbolsByAddr.symbolByRVA(rva);
                }
            }

            string functionName;

            if (symbol != null)
            {
                symbol.get_undecoratedNameEx(0x1000, out var unmangled);
                if (!string.IsNullOrEmpty(unmangled))
                {
                    functionName = unmangled;
                }
                else
                {
                    functionName = !string.IsNullOrEmpty(symbol.name) ? symbol.name : eip.ToString("x");
                }
            }
            else
            {
                functionName = eip.ToString("x");
            }

            this.rvaToFunctionNameMap.Add(rva, functionName);
        }
Exemplo n.º 2
0
        void IDiaSession.getSymbolsByAddr(out IDiaEnumSymbolsByAddr ppEnumbyAddr)
        {
            dynamic typ = null;

            if (!Dia3.StructCache.ContainsKey(loadAddress.ToString("x")))
            {
                var json = SymAPI.FromAddress(loadAddress.ToString("x"), CV);
                typ = JsonConvert.DeserializeObject <SymNameInfo>(json.Result);

                Dia3.StructCache.TryAdd(loadAddress.ToString("x"), typ);
            }
            Dia3.StructCache.TryGetValue(loadAddress.ToString("x"), out typ);

            ppEnumbyAddr = new EnumSymbols(CV, EnumSymType.ByAddr, typ);
            return;
        }