MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ELFImage

Class ELFImage

dpdk/buildtools/pmdinfogen.py:41–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39
40
41class ELFImage:
42 def __init__(self, data):
43 version = tuple(int(c) for c in elftools.__version__.split("."))
44 self._legacy_elftools = version < (0, 24)
45
46 self._image = ELFFile(data)
47
48 section = b".symtab" if self._legacy_elftools else ".symtab"
49 self._symtab = self._image.get_section_by_name(section)
50 if not isinstance(self._symtab, SymbolTableSection):
51 raise Exception(".symtab section is not a symbol table")
52
53 @property
54 def is_big_endian(self):
55 return not self._image.little_endian
56
57 def find_by_name(self, name):
58 symbol = self._get_symbol_by_name(name)
59 return ELFSymbol(self._image, symbol[0]) if symbol else None
60
61 def _get_symbol_by_name(self, name):
62 if not self._legacy_elftools:
63 return self._symtab.get_symbol_by_name(name)
64 name = name.encode("utf-8")
65 for symbol in self._symtab.iter_symbols():
66 if symbol.name == name:
67 return [symbol]
68 return None
69
70 def find_by_pattern(self, pattern):
71 pattern = pattern.encode("utf-8") if self._legacy_elftools else pattern
72 for i in range(self._symtab.num_symbols()):
73 symbol = self._symtab.get_symbol(i)
74 if re.match(pattern, symbol.name):
75 yield ELFSymbol(self._image, symbol)
76
77
78class COFFSymbol:

Callers 1

load_imageFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected