[文档]classSimInspectMixin(VEXMixin):# open question: what should be done about the BP_AFTER breakpoints in cases where the engine uses exceptional# control flow?def_perform_vex_stmt_Dirty_call(self,func_name,ty,args,func=NO_OVERRIDE):self.state._inspect("dirty",when=BP_BEFORE,dirty_name=func_name,dirty_args=args,dirty_handler=func,dirty_result=NO_OVERRIDE)retval=self.state._inspect_getattr("dirty_result",NO_OVERRIDE)func=self.state._inspect_getattr("dirty_handler",func)args=self.state._inspect_getattr("dirty_args",args)iffuncisNO_OVERRIDE:func=NoneifretvalisNO_OVERRIDE:retval=super()._perform_vex_stmt_Dirty_call(func_name,ty,args,func=func)self.state._inspect("dirty",when=BP_AFTER,dirty_result=retval)returnself.state._inspect_getattr("dirty_result",retval)def_handle_vex_stmt_IMark(self,stmt):ifself.stmt_idx!=0:self.state._inspect("instruction",BP_AFTER)super()._handle_vex_stmt_IMark(stmt)self.state._inspect("instruction",BP_BEFORE,instruction=stmt.addr+stmt.delta)def_handle_vex_expr(self,expr):self.state._inspect("expr",BP_BEFORE,expr=expr,expr_result=NO_OVERRIDE)expr_result=self.state._inspect_getattr("expr_result",NO_OVERRIDE)ifexpr_resultisnotNO_OVERRIDE:returnexpr_resultreturnsuper()._handle_vex_expr(expr)def_instrument_vex_expr(self,result):result=super()._instrument_vex_expr(result)self.state._inspect("expr",BP_AFTER,expr_result=result)returnself.state._inspect_getattr("expr_result",result)def_handle_vex_stmt(self,stmt):self.state._inspect("statement",BP_BEFORE,statement=self.stmt_idx)super()._handle_vex_stmt(stmt)self.state._inspect("statement",BP_AFTER)