# 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):
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):
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):
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):
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