1class AngrError(Exception):
2    pass
3
4class AngrValueError(AngrError, ValueError):
5    pass
6
7class AngrLifterError(AngrError):
8    pass
9
10class AngrExitError(AngrError):
11    pass
12
13class AngrPathError(AngrError):
14    pass
15
16class AngrVaultError(AngrError):
17    pass
18
19class PathUnreachableError(AngrPathError):
20    pass
21
22class SimulationManagerError(AngrError):
23    pass
24
25class AngrInvalidArgumentError(AngrError):
26    pass
27
28class AngrSurveyorError(AngrError):
29    pass
30
31class AngrAnalysisError(AngrError):
32    pass
33
34class AngrBladeError(AngrError):
35    pass
36
37class AngrBladeSimProcError(AngrBladeError):
38    pass
39
40class AngrAnnotatedCFGError(AngrError):
41    pass
42
43class AngrBackwardSlicingError(AngrError):
44    pass
45
46class AngrGirlScoutError(AngrError):
47    pass
48
49class AngrCallableError(AngrSurveyorError):
50    pass
51
52class AngrCallableMultistateError(AngrCallableError):
53    pass
54
55class AngrSyscallError(AngrError):
56    pass
57
58class AngrSimOSError(AngrError):
59    pass
60
61class AngrAssemblyError(AngrError):
62    pass
63
64# Congruency check failure
65class AngrIncongruencyError(AngrAnalysisError):
66    pass
67
68#
69# ForwardAnalysis errors
70#
71
72class AngrForwardAnalysisError(AngrError):
73    pass
74
75class AngrSkipJobNotice(AngrForwardAnalysisError):
76    pass
77
78class AngrDelayJobNotice(AngrForwardAnalysisError):
79    pass
80
81class AngrJobMergingFailureNotice(AngrForwardAnalysisError):
82    pass
83
84class AngrJobWideningFailureNotice(AngrForwardAnalysisError):
85    pass
86
87#
88# CFG errors
89#
90
91class AngrCFGError(AngrError):
92    pass
93
94#
95# VFG Errors and notices
96#
97
98class AngrVFGError(AngrError):
99    pass
100
101class AngrVFGRestartAnalysisNotice(AngrVFGError):
102    pass
103
104#
105# Data graph errors
106#
107
108class AngrDataGraphError(AngrAnalysisError):
109    # TODO: deprecated
110    pass
111
112class AngrDDGError(AngrAnalysisError):
113    pass
114
115#
116# Loop analysis
117#
118
119class AngrLoopAnalysisError(AngrAnalysisError):
120    pass
121
122#
123# Exploration techniques
124#
125
126class AngrExplorationTechniqueError(AngrError):
127    pass
128
129class AngrExplorerError(AngrExplorationTechniqueError):
130    pass
131
132class AngrDirectorError(AngrExplorationTechniqueError):
133    pass
134
135class AngrTracerError(AngrExplorationTechniqueError):
136    pass
137
138
139#
140# VariableRecovery errors
141#
142
143class AngrVariableRecoveryError(AngrAnalysisError):
144    pass
145
146
147#
148# AngrDB errors
149#
150
151
152class AngrDBError(AngrError):
153    pass
154
155
156class AngrCorruptDBError(AngrDBError):
157    pass
158
159class AngrIncompatibleDBError(AngrDBError):
160    pass
161
162#
163# Tracer
164#
165
166class TracerEnvironmentError(AngrError):
167    pass
168
169#
170# Simulation errors
171#
172
173class SimError(Exception):
174    bbl_addr = None
175    stmt_idx = None
176    ins_addr = None
177    executed_instruction_count = None
178    guard = None
179
180    def record_state(self, state):
181        self.bbl_addr = state.scratch.bbl_addr
182        self.stmt_idx = state.scratch.stmt_idx
183        self.ins_addr = state.scratch.ins_addr
184        self.executed_instruction_count = state.history.recent_instruction_count
185        self.guard = state.scratch.guard
186        return self
187
188#
189# State-related errors
190#
191
192class SimStateError(SimError):
193    pass
194
195class SimMergeError(SimStateError):
196    pass
197
198class SimMemoryError(SimStateError):
199    pass
200
201class SimMemoryMissingError(SimMemoryError):
202    pass
203
204class SimAbstractMemoryError(SimMemoryError):
205    pass
206
207class SimRegionMapError(SimMemoryError):
208    pass
209
210class SimMemoryLimitError(SimMemoryError):
211    pass
212
213class SimMemoryAddressError(SimMemoryError):
214    pass
215
216class SimFastMemoryError(SimMemoryError):
217    pass
218
219class SimEventError(SimStateError):
220    pass
221
222class SimPosixError(SimStateError):
223    pass
224
225
226class SimFilesystemError(SimError):
227    pass
228
229class SimSymbolicFilesystemError(SimFilesystemError):
230    pass
231
232class SimFileError(SimMemoryError, SimFilesystemError):
233    pass
234
235class SimHeapError(SimStateError):
236    pass
237
238#
239# Error class during VEX parsing
240#
241
242class SimUnsupportedError(SimError):
243    pass
244
245#
246# Solver-related errors
247#
248
249class SimSolverError(SimError):
250    pass
251
252class SimSolverModeError(SimSolverError):
253    pass
254
255class SimSolverOptionError(SimSolverError):
256    pass
257
258class SimValueError(SimSolverError):
259    pass
260
261class SimUnsatError(SimValueError):
262    pass
263
264#
265# SimIROp errors
266#
267
268class SimOperationError(SimError):
269    pass
270
271class UnsupportedIROpError(SimOperationError, SimUnsupportedError):
272    pass
273
274#
275# SimIRExpr errors
276#
277
278class SimExpressionError(SimError):
279    pass
280
281class UnsupportedIRExprError(SimExpressionError, SimUnsupportedError):
282    pass
283
284class SimCCallError(SimExpressionError):
285    pass
286
287class UnsupportedCCallError(SimCCallError, SimUnsupportedError):
288    pass
289
290class SimUninitializedAccessError(SimExpressionError):
291    def __init__(self, expr_type, expr):
292        SimExpressionError.__init__(self)
293        self.expr_type = expr_type
294        self.expr = expr
295
296    def __repr__(self):
297        return "SimUninitializedAccessError (expr %s is used as %s)" % (self.expr, self.expr_type)
298
299    def __reduce__(self):
300        return (SimUninitializedAccessError, (self.expr_type, self.expr))
301
302#
303# SimIRStmt errors
304#
305
306class SimStatementError(SimError):
307    pass
308
309class UnsupportedIRStmtError(SimStatementError, SimUnsupportedError):
310    pass
311
312class UnsupportedDirtyError(UnsupportedIRStmtError, SimUnsupportedError):
313    pass
314
315#
316# Engine-related errors
317#
318
319class SimEngineError(SimError):
320    pass
321
322class SimIRSBError(SimEngineError):
323    pass
324
325class SimTranslationError(SimEngineError):
326    pass
327
328class SimProcedureError(SimEngineError):
329    pass
330
331class SimProcedureArgumentError(SimProcedureError):
332    pass
333
334class SimShadowStackError(SimProcedureError):
335    pass
336
337class SimFastPathError(SimEngineError):
338    pass
339
340class SimIRSBNoDecodeError(SimIRSBError):
341    pass
342
343class AngrUnsupportedSyscallError(AngrSyscallError, SimProcedureError, SimUnsupportedError):
344    pass
345
346UnsupportedSyscallError = AngrUnsupportedSyscallError
347
348class SimReliftException(SimEngineError):
349    def __init__(self, state):
350        super(SimReliftException, self).__init__()
351        self.state = state
352
353#
354# SimSlicer errors
355#
356
357class SimSlicerError(SimError):
358    pass
359
360#
361# SimAction errors
362#
363
364class SimActionError(SimError):
365    pass
366
367#
368# SimCC errors
369#
370
371class SimCCError(SimError):
372    pass
373
374#
375# UCManager errors
376#
377
378class SimUCManagerError(SimError):
379    pass
380
381class SimUCManagerAllocationError(SimUCManagerError):
382    pass
383
384#
385# SimUnicorn errors
386#
387
388class SimUnicornUnsupport(SimError):
389    pass
390
391class SimUnicornError(SimError):
392    pass
393
394class SimUnicornSymbolic(SimError):
395    pass
396
397
398#
399# Call-stack Errors
400#
401
402class SimEmptyCallStackError(SimError):
403    pass
404
405#
406# SimStateOptions Errors
407#
408
409class SimStateOptionsError(SimError):
410    pass
411
412#
413# Errors that may be handled by exception handling
414#
415
416class SimException(SimError):
417    pass
418
419class SimSegfaultException(SimException, SimMemoryError):
420    def __init__(self, addr, reason, original_addr=None):
421        self.addr = addr
422        self.reason = reason
423        self.original_addr = original_addr
424        super(SimSegfaultError, self).__init__('%#x (%s)' % (addr, reason))
425
426    def __repr__(self):
427        return 'SimSegfaultException(%#x (%s%s)' % (
428            self.addr,
429            self.reason,
430            (', original %s' % self.original_addr.__repr__(max_depth=3)) if self.original_addr is not None else ''
431        )
432
433    def __reduce__(self):
434        return (SimSegfaultException, (self.addr, self.reason, self.original_addr))
435
436SimSegfaultError = SimSegfaultException
437
438class SimZeroDivisionException(SimException, SimOperationError):
439    pass
440
441
442class AngrNoPluginError(AngrError):
443    pass
444
445#
446# Concrete Targets Execution errors
447#
448
449
450class SimConcreteMemoryError(AngrError):
451    pass
452
453
454class SimConcreteRegisterError(AngrError):
455    pass
456
457
458class SimConcreteBreakpointError(AngrError):
459    pass
460
461#
462# Decompiler errors
463#
464
465class UnsupportedNodeTypeError(AngrError, NotImplementedError):
466    pass
467