public DisassemblyContentProvider Create() { var blocks = X86BlockFactory.Create(bitness, this.blocks); var cachedSymResolver = new CachedSymbolResolver(); foreach (var block in blocks) { if (!string.IsNullOrEmpty(block.Label)) { cachedSymResolver.AddSymbol(block.Address, new SymbolResolverResult(SymbolKindUtils.ToSymbolKind(block.LabelKind), block.Label, block.Address), fakeSymbol: true); } } if (symbolResolver != null) { var addresses = GetPossibleSymbolAddresses(blocks); if (addresses.Length != 0) { var symbolResolverResults = new SymbolResolverResult[addresses.Length]; symbolResolver.Resolve(addresses, symbolResolverResults); cachedSymResolver.AddSymbols(addresses, symbolResolverResults, fakeSymbol: false); } } for (int i = 0; i < blocks.Length; i++) { var block = blocks[i]; if (cachedSymResolver.TryResolve(block.Address, out var symbol, out _) && block.Label != symbol.Symbol) { blocks[i] = new X86Block(block.Kind, block.Address, block.Comment, symbol.Symbol, SymbolKindUtils.ToFormatterOutputTextKind(symbol.Kind), block.Instructions); } } return(new X86DisassemblyContentProvider(bitness, cachedSymResolver, deps.DisasmSettings, deps.MasmSettings, deps.NasmSettings, deps.GasSettings, formatterOptions, header, optimization, blocks, codeInfo, variableInfo, methodName)); }
public DisassemblyContentProvider Create() { var blocks = X86BlockFactory.Create(bitness, this.blocks); var cachedSymResolver = new CachedSymbolResolver(); if (symbolResolver != null) { var addresses = GetPossibleSymbolAddresses(blocks); if (addresses.Length != 0) { var symbolResolverResults = new SymbolResolverResult[addresses.Length]; symbolResolver.Resolve(addresses, symbolResolverResults); cachedSymResolver.AddSymbols(addresses, symbolResolverResults, fakeSymbol: false); } } foreach (var block in blocks) { if (!string.IsNullOrEmpty(block.Label)) { cachedSymResolver.AddSymbol(block.Address, new SymbolResolverResult(SymbolKindUtils.ToSymbolKind(block.LabelKind), block.Label, block.Address), fakeSymbol: true); } } return(new X86DisassemblyContentProvider(bitness, cachedSymResolver, deps.DisasmSettings, deps.MasmSettings, deps.NasmSettings, deps.GasSettings, formatterOptions, header, optimization, blocks, codeInfo, variableInfo, methodName)); }