class Base: (source)
Known subclasses: claripy.ast.bits.Bits
, claripy.ast.bool.Bool
, claripy.ast.int.Int
This is the base class of all claripy ASTs. An AST tracks a tree of operations on arguments. This class should not be instanciated directly - instead, use one of the constructor functions (BVS, BVV, FPS, FPV...) to construct a leaf node and then build more complicated expressions using operations. AST objects have *hash identity*. This means that an AST that has the same hash as another AST will be the *same* object. This is critical for efficient memory usage. As an example, the following is true:: a, b = two different ASTs c = b + a d = b + a assert c is d :ivar op: The operation that is being done on the arguments :ivar args: The arguments that are being used
Class Method | __init |
Undocumented |
Method | __a |
Initializes an AST. Takes the same arguments as ``Base.__new__()`` |
Method | __bool__ |
This prevents people from accidentally using an AST as a condition. For example, the following was previously common:: |
Method | __getattr__ |
Undocumented |
Method | __hash__ |
Undocumented |
Method | __init__ |
Undocumented |
Method | __iter__ |
This prevents people from iterating over ASTs. |
Method | __new__ |
This is called when you create a new Base object, whether directly or through an operation. It finalizes the arguments (see the _finalize function, above) and then computes a hash. If an AST of this hash already exists, it returns that AST... |
Method | __reduce__ |
Undocumented |
Method | __repr__ |
Undocumented |
Method | annotate |
Appends annotations to this AST. |
Method | append |
Appends an annotation to this AST. |
Method | append |
Appends several annotations to this AST. |
Method | canonicalize |
Undocumented |
Method | children |
Return an iterator over the nested children ASTs. |
Method | dbg |
Undocumented |
Method | dbg |
Returns a debug representation of this AST. |
Method | insert |
Inserts an annotation to this AST. |
Method | insert |
Inserts several annotations to this AST. |
Method | leaf |
Return an iterator over the leaf ASTs. |
Method | make |
Undocumented |
Method | remove |
Removes an annotation from this AST. |
Method | remove |
Removes several annotations from this AST. |
Method | replace |
Returns this AST but with the AST 'old' replaced with AST 'new' in its subexpressions. |
Method | replace |
Replaces annotations on this AST. |
Method | replace |
Returns this AST with subexpressions replaced by those that can be found in `replacements` dict. |
Method | shallow |
Returns a string representation of this AST, but with a maximum depth to prevent floods of text being printed. |
Method | split |
Splits the AST if its operation is `split_on` (i.e., return all the arguments). Otherwise, return a list with just the AST. |
Method | structurally |
Structurally compares two A objects, and check if their corresponding leaves are definitely the same A object (name-wise or hash-identity wise). |
Method | swap |
This returns the same AST, with the arguments swapped out for new_args. |
Method | to |
Returns itself. Provides compatibility with other classes (such as SimActionObject) which provide a similar method to unwrap to an AST. |
Constant | FULL |
Undocumented |
Constant | FULL |
Undocumented |
Constant | LITE |
Undocumented |
Constant | LITE |
Undocumented |
Constant | MID |
Undocumented |
Constant | UNSIMPLIFIED |
Undocumented |
Class Variable | __slots__ |
Undocumented |
Instance Variable | annotations |
Undocumented |
Instance Variable | args |
Undocumented |
Instance Variable | depth |
Undocumented |
Instance Variable | length |
Undocumented |
Instance Variable | op |
Undocumented |
Instance Variable | symbolic |
Undocumented |
Instance Variable | variables |
Undocumented |
Property | cache |
A key that refers to this AST - this value is appropriate for usage as a key in dictionaries. |
Property | cardinality |
Undocumented |
Property | concrete |
Undocumented |
Property | ite |
Returns an equivalent AST that "burrows" the ITE expressions as deep as possible into the ast, for simpler printing. |
Property | ite |
Returns an equivalent AST that "excavates" the ITE expressions out as far as possible toward the root of the AST, for processing in static analyses. |
Property | multivalued |
Undocumented |
Property | recursive |
DEPRECATED: Use children_asts() instead. |
Property | recursive |
DEPRECATED: Use leaf_asts() instead. |
Property | singlevalued |
Undocumented |
Property | uc |
The depth of allocation by lazy-initialization. It's only used in under-constrained symbolic execution mode. |
Property | uninitialized |
Whether this AST comes from an uninitialized dereference or not. It's only used in under-constrained symbolic execution mode. |
Static Method | _arg |
Undocumented |
Static Method | _ast |
Serialize the AST and get a bytestring for hashing. |
Static Method | _calc |
Calculates the hash of an AST, given the operation, args, and kwargs. |
Static Method | _check |
Undocumented |
Static Method | _op |
Undocumented |
Method | _apply |
Undocumented |
Method | _burrow |
Undocumented |
Method | _excavate |
Undocumented |
Method | _first |
Undocumented |
Method | _identify |
Undocumented |
Method | _rename |
Undocumented |
Method | _type |
Undocumented |
Class Variable | _hash |
Undocumented |
Class Variable | _leaf |
Undocumented |
Instance Variable | _burrowed |
Undocumented |
Instance Variable | _cache |
Undocumented |
Instance Variable | _cached |
Undocumented |
Instance Variable | _eager |
Undocumented |
Instance Variable | _errored |
Undocumented |
Instance Variable | _excavated |
Undocumented |
Instance Variable | _hash |
Undocumented |
Instance Variable | _relocatable |
Undocumented |
Instance Variable | _simplified |
Undocumented |
Instance Variable | _uc |
Undocumented |
Instance Variable | _uneliminatable |
Undocumented |
Instance Variable | _uninitialized |
Undocumented |
Property | _encoded |
Undocumented |
def __init_with_annotations__(cls, op, a_args, depth=None, uneliminatable_annotations=None, relocatable_annotations=None, **kwargs): (source) ¶
Undocumented
Initializes an AST. Takes the same arguments as ``Base.__new__()`` We use this instead of ``__init__`` due to python's undesirable behavior w.r.t. automatically calling it on return from ``__new__``.
This prevents people from accidentally using an AST as a condition. For example, the following was previously common:: a,b = two ASTs if a == b: do something The problem is that `a == b` would return an AST, because an AST can be symbolic and there could be no way to actually know the value of that without a constraint solve. This caused tons of issues.
This is called when you create a new Base object, whether directly or through an operation. It finalizes the arguments (see the _finalize function, above) and then computes a hash. If an AST of this hash already exists, it returns that AST. Otherwise, it creates, initializes, and returns the AST. :param op: The AST operation ('__add__', 'Or', etc) :param args: The arguments to the AST operation (i.e., the objects to add) :param variables: The symbolic variables present in the AST (default: empty set) :param symbolic: A flag saying whether or not the AST is symbolic (default: False) :param length: An integer specifying the bit length of this AST (default: None) :param simplified: A measure of how simplified this AST is. 0 means unsimplified, 1 means fast-simplified (basically, just undoing the Reverse op), and 2 means simplified through z3. :param errored: A set of backends that are known to be unable to handle this AST. :param eager_backends: A list of backends with which to attempt eager evaluation :param annotations: A frozenset of annotations applied onto this AST.
Appends annotations to this AST. :param args: the tuple of annotations to append (variadic positional args) :param remove_annotations: annotations to remove :returns: a new AST, with the annotations added
Appends an annotation to this AST. :param a: the annotation to append :returns: a new AST, with the annotation added
Appends several annotations to this AST. :param new_tuple: the tuple of annotations to append :returns: a new AST, with the annotations added
Inserts an annotation to this AST. :param a: the annotation to insert :returns: a new AST, with the annotation added
Inserts several annotations to this AST. :param new_tuple: the tuple of annotations to insert :returns: a new AST, with the annotations added
Removes an annotation from this AST. :param a: the annotation to remove :returns: a new AST, with the annotation removed
Removes several annotations from this AST. :param remove_sequence: a sequence/set of the annotations to remove :returns: a new AST, with the annotations removed
Replaces annotations on this AST. :param new_tuple: the tuple of annotations to replace the old annotations with :returns: a new AST, with the annotations added
Returns this AST with subexpressions replaced by those that can be found in `replacements` dict. :param variable_set: For optimization, ast's without these variables are not checked for replacing. :param replacements: A dictionary of hashes to their replacements. :param leaf_operation: An operation that should be applied to the leaf nodes. :returns: An AST with all instances of ast's in replacements.
Returns a string representation of this AST, but with a maximum depth to prevent floods of text being printed. :param max_depth: The maximum depth to print. :param explicit_length: Print lengths of BVV arguments. :param details: An integer value specifying how detailed the output should be: LITE_REPR - print short repr for both operations and BVs, MID_REPR - print full repr for operations and short for BVs, FULL_REPR - print full repr of both operations and BVs. :param inner: whether or not it is an inner AST :param parent_prec: parent operation precedence level :param left: whether or not it is a left AST :returns: A string representing the AST
Splits the AST if its operation is `split_on` (i.e., return all the arguments). Otherwise, return a list with just the AST.
Structurally compares two A objects, and check if their corresponding leaves are definitely the same A object (name-wise or hash-identity wise). :param o: the other claripy A object :returns: True/False
Returns itself. Provides compatibility with other classes (such as SimActionObject) which provide a similar method to unwrap to an AST.
claripy.ast.bool.Bool
, claripy.ast.bv.BV
, claripy.ast.fp.FP
, claripy.ast.int.Int
, claripy.ast.strings.String
, claripy.ast.vs.VS
Undocumented
Returns an equivalent AST that "burrows" the ITE expressions as deep as possible into the ast, for simpler printing.
Returns an equivalent AST that "excavates" the ITE expressions out as far as possible toward the root of the AST, for processing in static analyses.
The depth of allocation by lazy-initialization. It's only used in under-constrained symbolic execution mode. :returns: An integer indicating the allocation depth, or None if it's not from lazy-initialization.
Whether this AST comes from an uninitialized dereference or not. It's only used in under-constrained symbolic execution mode. :returns: True/False/None (unspecified).
Serialize the AST and get a bytestring for hashing. :param op: The operator. :param args_tup: A tuple of arguments. :param keywords: A dict of keywords. :return: The serialized bytestring.
Calculates the hash of an AST, given the operation, args, and kwargs. :param op: The operation. :param args: The arguments to the operation. :param keywords: A dict including the 'symbolic', 'variables', and 'length' items. :returns: a hash. We do it using md5 to avoid hash collisions. (hash(-1) == hash(-2), for example)