def_lift(self):ifTYPE_CHECKING:assertisinstance(self.irsb.arch,LibvexArch)assertisinstance(self.data,CLiftSource)try:_libvex_lock.acquire()pvc.log_level=log.getEffectiveLevel()vex_arch=getattr(pvc,self.irsb.arch.vex_arch,None)assertvex_archisnotNoneifself.bytes_offsetisNone:self.bytes_offset=0ifself.max_bytesisNoneorself.max_bytes>VEX_MAX_BYTES:max_bytes=VEX_MAX_BYTESelse:max_bytes=self.max_bytesifself.max_instisNoneorself.max_inst>VEX_MAX_INSTRUCTIONS:max_inst=VEX_MAX_INSTRUCTIONSelse:max_inst=self.max_inststrict_block_end=self.strict_block_endifstrict_block_endisNone:strict_block_end=Truecollect_data_refs=1ifself.collect_data_refselse0ifcollect_data_refs!=0andself.load_from_ro_regions:collect_data_refs|=2# the second bit stores load_from_ro_regionsifself.cross_insn_opt:px_control=VexRegisterUpdates.VexRegUpdUnwindregsAtMemAccesselse:px_control=VexRegisterUpdates.VexRegUpdLdAllregsAtEachInsnself.irsb.arch.vex_archinfo["hwcache_info"]["caches"]=ffi.NULLlift_r=pvc.vex_lift(vex_arch,self.irsb.arch.vex_archinfo,self.data+self.bytes_offset,self.irsb.addr,max_inst,max_bytes,self.opt_level,self.traceflags,self.allow_arch_optimizations,strict_block_end,collect_data_refs,px_control,self.bytes_offset,)log_str=self.get_vex_log()iflift_r==ffi.NULL:raiseLiftingException("libvex: unknown error"iflog_strisNoneelselog_str)else:iflog_strisnotNone:log.debug(log_str)self.irsb._from_c(lift_r,skip_stmts=self.skip_stmts)ifself.irsb.size==0:log.debug("raising lifting exception")raiseLiftingException("libvex: could not decode any instructions @ 0x%x"%self.addr)finally:_libvex_lock.release()self.irsb.arch.vex_archinfo["hwcache_info"]["caches"]=None