+ yield ELFSymbol(self._image, symbol)
+
+
+class COFFSymbol:
+ def __init__(self, image, symbol):
+ self._image = image
+ self._symbol = symbol
+
+ def get_value(self, offset, size):
+ value = self._symbol.get_value(offset)
+ return value[:size] if value else value
+
+ @property
+ def string_value(self):
+ value = self._symbol.get_value(0)
+ return coff.decode_asciiz(value) if value else ''
+
+
+class COFFImage:
+ def __init__(self, data):
+ self._image = coff.Image(data)
+
+ @property
+ def is_big_endian(self):
+ return False
+
+ def find_by_prefix(self, prefix):
+ for symbol in self._image.symbols:
+ if symbol.name.startswith(prefix):
+ yield COFFSymbol(self._image, symbol)
+
+ def find_by_name(self, name):
+ for symbol in self._image.symbols:
+ if symbol.name == name:
+ return COFFSymbol(self._image, symbol)
+ return None