Ejemplo n.º 1
0
 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])
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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)