Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if self.use_cache:
cache_key = (buff, addr, max_size, num_inst, self.arch.vex_arch, byte_offset, thumb, opt_level)
if cache_key in self.irsb_cache:
return self.irsb_cache[cache_key]
pyvex.set_iropt_level(opt_level)
try:
if passed_max_size and not passed_num_inst:
block = SerializableIRSB(bytes=buff, mem_addr=addr, num_bytes=max_size, arch=self.arch, bytes_offset=byte_offset, traceflags=traceflags)
elif not passed_max_size and passed_num_inst:
block = SerializableIRSB(bytes=buff, mem_addr=addr, num_inst=num_inst, arch=self.arch, bytes_offset=byte_offset, traceflags=traceflags)
else:
block = SerializableIRSB(bytes=buff, mem_addr=addr, num_bytes=min(size, max_size), num_inst=num_inst, arch=self.arch, bytes_offset=byte_offset, traceflags=traceflags)
except pyvex.PyVEXError:
l.debug("VEX translation error at 0x%x", addr)
l.debug("Using bytes: " + str(pyvex.ffi.buffer(buff, size)).encode('hex'))
e_type, value, traceback = sys.exc_info()
raise AngrTranslationError, ("Translation error", e_type, value), traceback
if self.use_cache:
self.irsb_cache[cache_key] = block
block = self._post_process(block)
return block
if byte_string is None:
if backup_state is not None:
self._bytes = self._vex_engine._load_bytes(addr - thumb, size, state=backup_state)[0]
if type(self._bytes) is not bytes:
self._bytes = bytes(pyvex.ffi.buffer(self._bytes, size))
else:
self._bytes = None
elif type(byte_string) is bytes:
if self.size is not None:
self._bytes = byte_string[:self.size]
else:
self._bytes = byte_string
else:
# Convert bytestring to a str
# size will ALWAYS be known at this point
self._bytes = str(pyvex.ffi.buffer(byte_string, self.size))
size = stop_point - addr
continue
if use_cache:
self._block_cache[cache_key] = irsb
if state:
state._inspect('vex_lift', BP_AFTER, mem_read_address=addr, mem_read_length=size)
return irsb
# phase x: error handling
except pyvex.PyVEXError as e:
l.debug("VEX translation error at %#x", addr)
if isinstance(buff, bytes):
l.debug('Using bytes: %r', buff)
else:
l.debug("Using bytes: %r", pyvex.ffi.buffer(buff, size))
raise SimTranslationError("Unable to translate bytecode") from e