def execute(self):
if issymbolic(self.PC):<EOL><INDENT>raise ConcretizeRegister(self, '<STR_LIT>', policy='<STR_LIT>')<EOL><DEDENT>if not self.memory.access_ok(self.PC, '<STR_LIT:x>'):<EOL><INDENT>raise InvalidMemoryAccess(self.PC, '<STR_LIT:x>')<EOL><DEDENT>self._publish('<STR_LIT>', self.PC)<EOL>insn = self.decode_instruction(self.PC)<EOL>self._last_pc = self.PC<EOL>self._publish('<STR_LIT>', self.PC, insn)<EOL>if insn.address != self.PC:<EOL><INDENT>return<EOL><DEDENT>name = self.canonicalize_instruction_name(insn)<EOL>if logger.level == logging.DEBUG:<EOL><INDENT>logger.debug(self.render_instruction(insn))<EOL>for l in self.render_registers():<EOL><INDENT>register_logger.debug(l)<EOL><DEDENT><DEDENT>try:<EOL><INDENT>if self._concrete and '<STR_LIT>' in name:<EOL><INDENT>self.emu.sync_unicorn_to_manticore()<EOL><DEDENT>if self._concrete and '<STR_LIT>' not in name:<EOL><INDENT>self.emulate(insn)<EOL>if self.PC == self._break_unicorn_at:<EOL><INDENT>logger.debug("<STR_LIT>")<EOL>self._break_unicorn_at = None<EOL>self._concrete = False<EOL><DEDENT><DEDENT>else:<EOL><INDENT>implementation = getattr(self, name, None)<EOL>if implementation is not None:<EOL><INDENT>implementation(*insn.operands)<EOL><DEDENT>else:<EOL><INDENT>text_bytes = '<STR_LIT:U+0020>'.join('<STR_LIT>' % x for x in insn.bytes)<EOL>logger.warning("<STR_LIT>",<EOL>insn.address, text_bytes, insn.mnemonic, insn.op_str)<EOL>self.backup_emulate(insn)<EOL><DEDENT><DEDENT><DEDENT>except (Interruption, Syscall) as e:<EOL><INDENT>e.on_handled = lambda: self._publish_instruction_as_executed(insn)<EOL>raise e<EOL><DEDENT>else:<EOL><INDENT>self._publish_instruction_as_executed(insn)<EOL><DEDENT>
Decode, and execute one instruction pointed by register PC