def readcallbacks(self, data): self.callbacks = [] while len(data) >= self.elsize: v = struct.unpack(self.fields[0].typename, data[:self.elsize])[0] if v == 0: return self.callbacks.append(v) data = data[self.elsize:]
def Name(self): if self._Name.startswith("\0" * 4): index = struct.unpack("I", self._Name[4:8])[0] return index.strip("\0") else: try: return self._Name.decode("utf-8").strip("\0") except UnicodeDecodeError: logger.info("StdSymbolHdr: Name decode error %s" % repr(self._Name)) return self._Name
def readimports(self, data): self.imports = [] fshift = (self.elsize * 8) - 1 while len(data) >= self.elsize: v = struct.unpack(self.fmt, data[:self.elsize])[0] if v == 0: return flag = v >> fshift if flag == 1: self.imports.append([flag, v & 0xFFFF]) elif flag == 0: self.imports.append([flag, v & 0x7FFFFFFF]) data = data[self.elsize:]
def __init__(self, data): hint = struct.unpack("H", data[:2]) s, _, _ = data[2:].partition(b"\0") self.hint = hint self.symbol = str(s.decode())
def __init__(self, data=None): if data is None: data = struct.pack("I", 4) self.length = struct.unpack("I", data[:4]) self.strings = data[4:self.length].split("\0") self.strings.pop()