Source code for angr.errors

# pylint:disable=missing-class-docstring


[docs]class AngrError(Exception): pass
[docs]class AngrValueError(AngrError, ValueError): pass
[docs]class AngrLifterError(AngrError): pass
[docs]class AngrExitError(AngrError): pass
[docs]class AngrPathError(AngrError): pass
[docs]class AngrVaultError(AngrError): pass
[docs]class PathUnreachableError(AngrPathError): pass
[docs]class SimulationManagerError(AngrError): pass
[docs]class AngrInvalidArgumentError(AngrError): pass
[docs]class AngrSurveyorError(AngrError): pass
[docs]class AngrAnalysisError(AngrError): pass
[docs]class AngrBladeError(AngrError): pass
[docs]class AngrBladeSimProcError(AngrBladeError): pass
[docs]class AngrAnnotatedCFGError(AngrError): pass
[docs]class AngrBackwardSlicingError(AngrError): pass
[docs]class AngrGirlScoutError(AngrError): pass
[docs]class AngrCallableError(AngrSurveyorError): pass
[docs]class AngrCallableMultistateError(AngrCallableError): pass
[docs]class AngrSyscallError(AngrError): pass
[docs]class AngrSimOSError(AngrError): pass
[docs]class AngrAssemblyError(AngrError): pass
# Congruency check failure
[docs]class AngrIncongruencyError(AngrAnalysisError): pass
# # ForwardAnalysis errors #
[docs]class AngrForwardAnalysisError(AngrError): pass
[docs]class AngrSkipJobNotice(AngrForwardAnalysisError): pass
[docs]class AngrDelayJobNotice(AngrForwardAnalysisError): pass
[docs]class AngrJobMergingFailureNotice(AngrForwardAnalysisError): pass
[docs]class AngrJobWideningFailureNotice(AngrForwardAnalysisError): pass
# # CFG errors #
[docs]class AngrCFGError(AngrError): pass
# # VFG Errors and notices #
[docs]class AngrVFGError(AngrError): pass
[docs]class AngrVFGRestartAnalysisNotice(AngrVFGError): pass
# # Data graph errors #
[docs]class AngrDataGraphError(AngrAnalysisError): # TODO: deprecated pass
[docs]class AngrDDGError(AngrAnalysisError): pass
# # Loop analysis #
[docs]class AngrLoopAnalysisError(AngrAnalysisError): pass
# # Exploration techniques #
[docs]class AngrExplorationTechniqueError(AngrError): pass
[docs]class AngrExplorerError(AngrExplorationTechniqueError): pass
[docs]class AngrDirectorError(AngrExplorationTechniqueError): pass
[docs]class AngrTracerError(AngrExplorationTechniqueError): pass
# # VariableRecovery errors #
[docs]class AngrVariableRecoveryError(AngrAnalysisError): pass
# # AngrDB errors #
[docs]class AngrDBError(AngrError): pass
[docs]class AngrCorruptDBError(AngrDBError): pass
[docs]class AngrIncompatibleDBError(AngrDBError): pass
# # Tracer #
[docs]class TracerEnvironmentError(AngrError): pass
# # Simulation errors #
[docs]class SimError(Exception): bbl_addr = None stmt_idx = None ins_addr = None executed_instruction_count = None guard = None
[docs] def record_state(self, state): self.bbl_addr = state.scratch.bbl_addr self.stmt_idx = state.scratch.stmt_idx self.ins_addr = state.scratch.ins_addr self.executed_instruction_count = state.history.recent_instruction_count self.guard = state.scratch.guard return self
# # State-related errors #
[docs]class SimStateError(SimError): pass
[docs]class SimMergeError(SimStateError): pass
[docs]class SimMemoryError(SimStateError): pass
[docs]class SimMemoryMissingError(SimMemoryError):
[docs] def __init__(self, missing_addr, missing_size, *args): super().__init__(missing_addr, missing_size, *args) self.missing_addr = missing_addr self.missing_size = missing_size
[docs]class SimAbstractMemoryError(SimMemoryError): pass
[docs]class SimRegionMapError(SimMemoryError): pass
[docs]class SimMemoryLimitError(SimMemoryError): pass
[docs]class SimMemoryAddressError(SimMemoryError): pass
[docs]class SimFastMemoryError(SimMemoryError): pass
[docs]class SimEventError(SimStateError): pass
[docs]class SimPosixError(SimStateError): pass
[docs]class SimFilesystemError(SimError): pass
[docs]class SimSymbolicFilesystemError(SimFilesystemError): pass
[docs]class SimFileError(SimMemoryError, SimFilesystemError): pass
[docs]class SimHeapError(SimStateError): pass
# # Error class during VEX parsing #
[docs]class SimUnsupportedError(SimError): pass
# # Solver-related errors #
[docs]class SimSolverError(SimError): pass
[docs]class SimSolverModeError(SimSolverError): pass
[docs]class SimSolverOptionError(SimSolverError): pass
[docs]class SimValueError(SimSolverError): pass
[docs]class SimUnsatError(SimValueError): pass
# # SimIROp errors #
[docs]class SimOperationError(SimError): pass
[docs]class UnsupportedIROpError(SimOperationError, SimUnsupportedError): pass
# # SimIRExpr errors #
[docs]class SimExpressionError(SimError): pass
[docs]class UnsupportedIRExprError(SimExpressionError, SimUnsupportedError): pass
[docs]class SimCCallError(SimExpressionError): pass
[docs]class UnsupportedCCallError(SimCCallError, SimUnsupportedError): pass
[docs]class SimUninitializedAccessError(SimExpressionError):
[docs] def __init__(self, expr_type, expr): SimExpressionError.__init__(self) self.expr_type = expr_type self.expr = expr
def __repr__(self): return f"SimUninitializedAccessError (expr {self.expr} is used as {self.expr_type})" def __reduce__(self): return (SimUninitializedAccessError, (self.expr_type, self.expr))
# # SimIRStmt errors #
[docs]class SimStatementError(SimError): pass
[docs]class UnsupportedIRStmtError(SimStatementError, SimUnsupportedError): pass
[docs]class UnsupportedDirtyError(UnsupportedIRStmtError, SimUnsupportedError): pass
[docs]class SimMissingTempError(SimValueError, IndexError): pass
# # Engine-related errors #
[docs]class SimEngineError(SimError): pass
[docs]class SimIRSBError(SimEngineError): pass
[docs]class SimTranslationError(SimEngineError): pass
[docs]class SimProcedureError(SimEngineError): pass
[docs]class SimProcedureArgumentError(SimProcedureError): pass
[docs]class SimShadowStackError(SimProcedureError): pass
[docs]class SimFastPathError(SimEngineError): pass
[docs]class SimIRSBNoDecodeError(SimIRSBError): pass
[docs]class AngrUnsupportedSyscallError(AngrSyscallError, SimProcedureError, SimUnsupportedError): pass
UnsupportedSyscallError = AngrUnsupportedSyscallError
[docs]class SimReliftException(SimEngineError):
[docs] def __init__(self, state): super().__init__() self.state = state
# # SimSlicer errors #
[docs]class SimSlicerError(SimError): pass
# # SimAction errors #
[docs]class SimActionError(SimError): pass
# # SimCC errors #
[docs]class SimCCError(SimError): pass
# # UCManager errors #
[docs]class SimUCManagerError(SimError): pass
[docs]class SimUCManagerAllocationError(SimUCManagerError): pass
# # SimUnicorn errors #
[docs]class SimUnicornUnsupport(SimError): pass
[docs]class SimUnicornError(SimError): pass
[docs]class SimUnicornSymbolic(SimError): pass
# # Call-stack Errors #
[docs]class SimEmptyCallStackError(SimError): pass
# # SimStateOptions Errors #
[docs]class SimStateOptionsError(SimError): pass
# # Errors that may be handled by exception handling #
[docs]class SimException(SimError): pass
[docs]class SimSegfaultException(SimException, SimMemoryError):
[docs] def __init__(self, addr, reason, original_addr=None): self.addr = addr self.reason = reason self.original_addr = original_addr super(SimSegfaultError, self).__init__(f"{addr:#x} ({reason})")
def __repr__(self): return "SimSegfaultException({:#x} ({}{})".format( self.addr, self.reason, (", original %s" % self.original_addr.__repr__(max_depth=3)) if self.original_addr is not None else "", ) def __reduce__(self): return (SimSegfaultException, (self.addr, self.reason, self.original_addr))
SimSegfaultError = SimSegfaultException
[docs]class SimZeroDivisionException(SimException, SimOperationError): pass
[docs]class AngrNoPluginError(AngrError): pass
# # Concrete Targets Execution errors #
[docs]class SimConcreteMemoryError(AngrError): pass
[docs]class SimConcreteRegisterError(AngrError): pass
[docs]class SimConcreteBreakpointError(AngrError): pass
# # Decompiler errors #
[docs]class UnsupportedNodeTypeError(AngrError, NotImplementedError): pass