public Symbol SimpleLookup(TargetAddress address, bool exact_match) { if (bfd.IsContinuous && ((address < bfd.StartAddress) || (address >= bfd.EndAddress))) { return(null); } if (list == null) { ArrayList the_list = bfd.GetSimpleSymbols(); the_list.Sort(); list = new Symbol [the_list.Count]; the_list.CopyTo(list); } for (int i = list.Length - 1; i >= 0; i--) { Symbol entry = list [i]; if (address < entry.Address) { continue; } long offset = address - entry.Address; if (offset == 0) { while (i > 0) { Symbol n_entry = list [--i]; if (n_entry.Address == entry.Address) { entry = n_entry; } else { break; } } return(new Symbol(entry.Name, address, 0)); } else if (exact_match) { return(null); } else { return(new Symbol( entry.Name, address - offset, (int)offset)); } } return(null); }