def testGroupSymbolInfosByOffset(self): offset_to_symbol_info = symbol_extractor.GroupSymbolInfosByOffset( self.symbol_infos) self.assertEquals(len(offset_to_symbol_info), 2) self.assertIn(0x42, offset_to_symbol_info) self.assertEquals(offset_to_symbol_info[0x42][0], self.symbol_infos[0]) self.assertEquals(offset_to_symbol_info[0x42][1], self.symbol_infos[1]) self.assertIn(0x64, offset_to_symbol_info) self.assertEquals(offset_to_symbol_info[0x64][0], self.symbol_infos[2])
def OffsetToSymbolsMap(self): """Map offsets to the set of matching symbols. Unlike OffsetToPrimaryMap, this is a 1-to-many mapping. Returns; {offset (int): [symbol_extractor.SymbolInfo]} """ if self._offset_to_symbols is None: self._offset_to_symbols = symbol_extractor.GroupSymbolInfosByOffset( self.SymbolInfos()) return self._offset_to_symbols
def _GroupSymbolInfosFromBinary(binary_filename): """Group all the symbols from a binary by name and offset. Args: binary_filename: path to the binary. Returns: A tuple of dict: (offset_to_symbol_infos, name_to_symbol_infos): - offset_to_symbol_infos: {offset: [symbol_info1, ...]} - name_to_symbol_infos: {name: [symbol_info1, ...]} """ symbol_infos = symbol_extractor.SymbolInfosFromBinary(binary_filename) symbol_infos_no_suffixes = [ s._replace(name=RemoveSuffixes(s.name)) for s in symbol_infos] return (symbol_extractor.GroupSymbolInfosByOffset(symbol_infos_no_suffixes), symbol_extractor.GroupSymbolInfosByName(symbol_infos_no_suffixes))
def _GroupSymbolsByOffset(binary_filename): """Produce a map symbol name -> all symbol names at same offset. Suffixes are stripped. """ symbol_infos = [ s._replace(name=RemoveSuffixes(s.name)) for s in symbol_extractor.SymbolInfosFromBinary(binary_filename)] offset_map = symbol_extractor.GroupSymbolInfosByOffset(symbol_infos) missing_offsets = 0 sym_to_matching = {} for sym in symbol_infos: if sym.offset not in offset_map: missing_offsets += 1 continue matching = [s.name for s in offset_map[sym.offset]] assert sym.name in matching sym_to_matching[sym.name] = matching return sym_to_matching
def _GroupLibrarySymbolInfosByOffset(lib_filename): """Returns a dict {offset: [SymbolInfo]} from a library.""" symbol_infos = symbol_extractor.SymbolInfosFromBinary(lib_filename) return symbol_extractor.GroupSymbolInfosByOffset(symbol_infos)