ROSE 0.11.145.192
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
Rose::BinaryAnalysis::SymbolicExpression Namespace Reference

Description

Namespace supplying types and functions for symbolic expressions.

These are used by certain instruction semantics policies and satisfiability modulo theory (SMT) solvers. These expressions are tailored to bit-vector and integer difference logics, whereas the expression nodes in other parts of ROSE have different goals.

Namespaces

namespace  TypeStyle
 Whether to use abbreviated or full output.
 

Classes

struct  AddSimplifier
 
struct  AndSimplifier
 
struct  AsrSimplifier
 
struct  ConcatSimplifier
 
struct  ConvertSimplifier
 
struct  EqSimplifier
 
class  Exception
 Exceptions for symbolic expressions. More...
 
class  ExpressionLessp
 Compare two expressions for STL containers. More...
 
class  ExprExprHashMap
 Mapping from expression to expression. More...
 
struct  ExprExprHashMapCompare
 
struct  ExprExprHashMapHasher
 
struct  ExtractSimplifier
 
class  Formatter
 Controls formatting of expression trees when printing. More...
 
class  Interior
 Interior node of an expression tree for instruction semantics. More...
 
struct  InvertSimplifier
 
struct  IteSimplifier
 
class  Leaf
 Leaf node of an expression tree for instruction semantics. More...
 
struct  LssbSimplifier
 
struct  MssbSimplifier
 
struct  NegateSimplifier
 
class  Node
 Base class for symbolic expression nodes. More...
 
struct  NoopSimplifier
 
struct  OrSimplifier
 
struct  ReinterpretSimplifier
 
struct  RolSimplifier
 
struct  RorSimplifier
 
struct  SdivSimplifier
 
struct  SetSimplifier
 
struct  SextendSimplifier
 
struct  SgeSimplifier
 
struct  SgtSimplifier
 
struct  ShiftSimplifier
 
struct  ShlSimplifier
 
struct  ShrSimplifier
 
class  Simplifier
 Operator-specific simplification methods. More...
 
struct  SleSimplifier
 
struct  SltSimplifier
 
struct  SmodSimplifier
 
struct  SmulSimplifier
 
class  Type
 Type of symbolic expression. More...
 
struct  UdivSimplifier
 
struct  UextendSimplifier
 
struct  UgeSimplifier
 
struct  UgtSimplifier
 
struct  UleSimplifier
 
struct  UltSimplifier
 
struct  UmodSimplifier
 
struct  UmulSimplifier
 
class  Visitor
 Base class for visiting nodes during expression traversal. More...
 
struct  XorSimplifier
 
struct  ZeropSimplifier
 

Typedefs

using InteriorPtr = Sawyer::SharedPointer< Interior >
 Reference counting pointer.
 
using LeafPtr = Sawyer::SharedPointer< Leaf >
 Reference counting pointer.
 
using Ptr = Sawyer::SharedPointer< Node >
 Reference counting pointer.
 
using Nodes = std::vector< Ptr >
 
using RenameMap = Map< uint64_t, uint64_t >
 
using Hash = uint64_t
 Hash of symbolic expression.
 
typedef Sawyer::Container::Set< Ptr, ExpressionLesspExpressionSet
 Set of expressions ordered by hash.
 

Enumerations

enum  Operator {
  OP_ADD ,
  OP_AND ,
  OP_ASR ,
  OP_CONCAT ,
  OP_EQ ,
  OP_EXTRACT ,
  OP_INVERT ,
  OP_ITE ,
  OP_LET ,
  OP_LSSB ,
  OP_MSSB ,
  OP_NE ,
  OP_NEGATE ,
  OP_NOOP ,
  OP_OR ,
  OP_READ ,
  OP_ROL ,
  OP_ROR ,
  OP_SDIV ,
  OP_SET ,
  OP_SEXTEND ,
  OP_SGE ,
  OP_SGT ,
  OP_SHL0 ,
  OP_SHL1 ,
  OP_SHR0 ,
  OP_SHR1 ,
  OP_SLE ,
  OP_SLT ,
  OP_SMOD ,
  OP_SMUL ,
  OP_UDIV ,
  OP_UEXTEND ,
  OP_UGE ,
  OP_UGT ,
  OP_ULE ,
  OP_ULT ,
  OP_UMOD ,
  OP_UMUL ,
  OP_WRITE ,
  OP_XOR ,
  OP_ZEROP ,
  OP_FP_ABS ,
  OP_FP_NEGATE ,
  OP_FP_ADD ,
  OP_FP_MUL ,
  OP_FP_DIV ,
  OP_FP_MULADD ,
  OP_FP_SQRT ,
  OP_FP_MOD ,
  OP_FP_ROUND ,
  OP_FP_MIN ,
  OP_FP_MAX ,
  OP_FP_LE ,
  OP_FP_LT ,
  OP_FP_GE ,
  OP_FP_GT ,
  OP_FP_EQ ,
  OP_FP_ISNORM ,
  OP_FP_ISSUBNORM ,
  OP_FP_ISZERO ,
  OP_FP_ISINFINITE ,
  OP_FP_ISNAN ,
  OP_FP_ISNEG ,
  OP_FP_ISPOS ,
  OP_CONVERT ,
  OP_REINTERPRET ,
  OP_NONE
}
 Operators for interior nodes of the expression tree. More...
 
enum  VisitAction {
  CONTINUE ,
  TRUNCATE ,
  TERMINATE
}
 Return type for visitors. More...
 

Functions

std::string toStr (Operator)
 
std::ostream & operator<< (std::ostream &o, const Node &)
 
std::ostream & operator<< (std::ostream &o, const Node::WithFormatter &)
 
Ptr setToIte (const Ptr &, const SmtSolverPtr &solver=SmtSolverPtr(), const LeafPtr &var=LeafPtr())
 Convert a set to an ite expression.
 
Hash hash (const std::vector< Ptr > &)
 Hash zero or more expressions.
 
template<typename InputIterator >
uint64_t nNodes (InputIterator begin, InputIterator end)
 Counts the number of nodes.
 
template<typename InputIterator >
uint64_t nNodesUnique (InputIterator begin, InputIterator end)
 Counts the number of unique nodes.
 
template<class Substitution >
Ptr substitute (const Ptr &src, Substitution &subber, const SmtSolverPtr &solver=SmtSolverPtr())
 On-the-fly substitutions.
 
LeafPtr makeVariable (const Type &, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeVariable (const Type &, uint64_t id, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeConstant (const Type &, const Sawyer::Container::BitVector &, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeIntegerVariable (size_t nBits, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeIntegerVariable (size_t nBits, uint64_t id, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeIntegerConstant (size_t nBits, uint64_t value, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeIntegerConstant (const Sawyer::Container::BitVector &, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeBooleanConstant (bool, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeMemoryVariable (size_t addressWidth, size_t valueWidth, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeMemoryVariable (size_t addressWidth, size_t valueWidth, uint64_t id, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeFloatingPointVariable (size_t eb, size_t sb, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeFloatingPointVariable (size_t eb, size_t sb, uint64_t id, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeFloatingPointConstant (float, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeFloatingPointConstant (double, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
LeafPtr makeFloatingPointNan (size_t eb, size_t sb, const std::string &comment="", unsigned flags=0)
 Leaf constructor.
 
Ptr makeAdd (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeAsr (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeAnd (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeOr (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeXor (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeConcat (const Ptr &hi, const Ptr &lo, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeConvert (const Ptr &a, const Type &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeEq (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeExtract (const Ptr &begin, const Ptr &end, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeInvert (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsInfinite (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsNan (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsNeg (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsNorm (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsPos (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsSubnorm (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIte (const Ptr &cond, const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeLet (const Ptr &a, const Ptr &b, const Ptr &c, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeLssb (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMax (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMin (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMssb (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMultiplyAdd (const Ptr &a, const Ptr &b, const Ptr &c, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeNe (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeNegate (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeRead (const Ptr &mem, const Ptr &addr, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeReinterpret (const Ptr &a, const Type &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeRol (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeRor (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeRound (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSet (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSet (const Ptr &a, const Ptr &b, const Ptr &c, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedDiv (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignExtend (const Ptr &newSize, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedGe (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedGt (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeShl0 (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeShl1 (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeShr0 (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeShr1 (const Ptr &sa, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeIsSignedPos (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedLe (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedLt (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedMax (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedMin (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedMod (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSignedMul (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeSqrt (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeDiv (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeExtend (const Ptr &newSize, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeGe (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeGt (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeLe (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeLt (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMod (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeMul (const Ptr &a, const Ptr &b, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeWrite (const Ptr &mem, const Ptr &addr, const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
Ptr makeZerop (const Ptr &a, const SmtSolverPtr &solver=SmtSolverPtr(), const std::string &comment="", unsigned flags=0)
 Interior node constructor.
 
std::vector< PtrfindCommonSubexpressions (const std::vector< Ptr > &)
 Find common subexpressions.
 
template<typename InputIterator >
std::vector< PtrfindCommonSubexpressions (InputIterator begin, InputIterator end)
 Find common subexpressions.
 

Variables

bool serializeVariableIds
 Whether to serialize variable IDs.
 
const uint64_t MAX_NNODES
 Maximum number of nodes that can be reported.
 

Typedef Documentation

◆ InteriorPtr

Reference counting pointer.

Definition at line 108 of file Rose/BinaryAnalysis/BasicTypes.h.

◆ LeafPtr

Reference counting pointer.

Definition at line 110 of file Rose/BinaryAnalysis/BasicTypes.h.

◆ Ptr

Reference counting pointer.

Definition at line 112 of file Rose/BinaryAnalysis/BasicTypes.h.

◆ Nodes

using Rose::BinaryAnalysis::SymbolicExpression::Nodes = typedef std::vector<Ptr>

Definition at line 153 of file SymbolicExpression.h.

◆ RenameMap

using Rose::BinaryAnalysis::SymbolicExpression::RenameMap = typedef Map<uint64_t, uint64_t>

Definition at line 154 of file SymbolicExpression.h.

◆ Hash

Hash of symbolic expression.

Definition at line 157 of file SymbolicExpression.h.

◆ ExpressionSet

Set of expressions ordered by hash.

Definition at line 927 of file SymbolicExpression.h.

Enumeration Type Documentation

◆ Operator

Operators for interior nodes of the expression tree.

Commutative operators generally take one or more operands. Operators such as shifting, extending, and truncating have the size operand appearing before the bit vector on which to operate (this makes the output more human-readable since the size operand is often a constant).

Enumerator
OP_ADD 

Addition.

One or more operands, all the same width.

OP_AND 

Bitwise conjunction.

One or more operands all the same width.

OP_ASR 

Arithmetic shift right.

Operand B shifted by A bits; 0 <= A < width(B). A is unsigned.

OP_CONCAT 

Concatenation.

Operand A becomes high-order bits. Any number of operands. Result is integer type.

OP_EQ 

Equality.

Two operands, both the same width.

OP_EXTRACT 

Extract subsequence of bits.

Extract bits [A..B) of C. 0 <= A < B <= width(C).

OP_INVERT 

Bitwise inversion.

One operand.

OP_ITE 

If-then-else.

A must be one bit. Returns B if A is set, C otherwise.

OP_LET 

Let expression.

Deferred substitution. Substitutes A for B in C.

OP_LSSB 

Least significant set bit or zero.

One operand.

OP_MSSB 

Most significant set bit or zero.

One operand.

OP_NE 

Inequality.

Two operands, both the same width.

OP_NEGATE 

Arithmetic negation.

One operand. For Booleans, use OP_INVERT (2's complement is a no-op).

OP_NOOP 

No operation.

Used only by the default constructor.

OP_OR 

Bitwise disjunction.

One or more operands all the same width.

OP_READ 

Read a value from memory.

Arguments are the memory state and the address expression.

OP_ROL 

Rotate left.

Rotate bits of B left by A bits. 0 <= A < width(B). A is unsigned.

OP_ROR 

Rotate right.

Rotate bits of B right by A bits. 0 <= B < width(B). A is unsigned.

OP_SDIV 

Signed division.

Two operands, A/B. Result width is width(A).

OP_SET 

Set of expressions.

Any number of operands in any order.

OP_SEXTEND 

Signed extension at msb.

Extend B to A bits by replicating B's most significant bit.

OP_SGE 

Signed greater-than-or-equal.

Two operands of equal width. Result is Boolean.

OP_SGT 

Signed greater-than.

Two operands of equal width. Result is Boolean.

OP_SHL0 

Shift left, introducing zeros at lsb.

Bits of B are shifted by A, where 0 <=A < width(B).

OP_SHL1 

Shift left, introducing ones at lsb.

Bits of B are shifted by A, where 0 <=A < width(B).

OP_SHR0 

Shift right, introducing zeros at msb.

Bits of B are shifted by A, where 0 <=A <width(B).

OP_SHR1 

Shift right, introducing ones at msb.

Bits of B are shifted by A, where 0 <=A <width(B).

OP_SLE 

Signed less-than-or-equal.

Two operands of equal width. Result is Boolean.

OP_SLT 

Signed less-than.

Two operands of equal width. Result is Boolean.

OP_SMOD 

Signed modulus.

Two operands, AB. Result width is width(B).

OP_SMUL 

Signed multiplication.

Two operands A*B. Result width is width(A)+width(B).

OP_UDIV 

Signed division.

Two operands, A/B. Result width is width(A).

OP_UEXTEND 

Unsigned extention at msb.

Extend B to A bits by introducing zeros at the msb of B.

OP_UGE 

Unsigned greater-than-or-equal.

Two operands of equal width. Boolean result.

OP_UGT 

Unsigned greater-than.

Two operands of equal width. Result is Boolean.

OP_ULE 

Unsigned less-than-or-equal.

Two operands of equal width. Result is Boolean.

OP_ULT 

Unsigned less-than.

Two operands of equal width. Result is Boolean (1-bit vector).

OP_UMOD 

Unsigned modulus.

Two operands, AB. Result width is width(B).

OP_UMUL 

Unsigned multiplication.

Two operands, A*B. Result width is width(A)+width(B).

OP_WRITE 

Write (update) memory with a new value.

Arguments are memory, address and value.

OP_XOR 

Bitwise exclusive disjunction.

One or more operands, all the same width.

OP_ZEROP 

Equal to zero.

One operand. Result is a single bit, set iff A is equal to zero.

OP_FP_ABS 

Floating-point absolute value.

Argument is FP value.

OP_FP_NEGATE 

Floating-point negation.

Argument is FP value.

OP_FP_ADD 

Floating-point addition.

Args are the FP addends.

OP_FP_MUL 

Floating-point multiply.

Args are the FP factors.

OP_FP_DIV 

Floating-point division.

Args are FP dividend and FP divisor.

OP_FP_MULADD 

Floating-point multiply-add.

For xy+z, args are x, y, z.

OP_FP_SQRT 

Floating-point square root.

Argument is the FP square.

OP_FP_MOD 

Floating-point remainder.

Args are FP dividend and FP divisor.

OP_FP_ROUND 

Floating-point round to integer as FP type.

Argument and result are both FP values.

OP_FP_MIN 

Floating-point minimum.

Args are one or more FP values.

OP_FP_MAX 

Floating-point maximum.

Args are one or more FP values.

OP_FP_LE 

Floating-point less-than or equal.

Args are the two FP values to compare.

OP_FP_LT 

Floating-point less-than.

Args are the two FP values to compare.

OP_FP_GE 

Floating-point greater-than or equal.

Args are the two FP values to compare.

OP_FP_GT 

Floating-point greater than.

Args are the two FP values to compare.

OP_FP_EQ 

Floating-point equality.

Args are the two FP values to compare.

OP_FP_ISNORM 

Floating-point normal class.

Argument is the FP value to check.

OP_FP_ISSUBNORM 

Floating-point subnormal class.

Argument is the FP value to check.

OP_FP_ISZERO 

Floating-point zero class.

Argument is the FP value to check.

OP_FP_ISINFINITE 

Floating-point infinity class.

Argument is the FP value to check.

OP_FP_ISNAN 

Floating-point NaN class.

Argument is the FP value to check.

OP_FP_ISNEG 

Floating-point negative class.

Argument is the FP value to check.

OP_FP_ISPOS 

Floating-point positive class.

Argument is the FP value to check.

OP_CONVERT 

Convert from one type to another.

Argument is the source value.

OP_REINTERPRET 

Interpret the value as a different type without converting.

Argument is the source value.

OP_NONE 

No operation.

Result of getOperator on a node that doesn't have an operator.

Definition at line 77 of file SymbolicExpression.h.

◆ VisitAction

Return type for visitors.

Enumerator
CONTINUE 

Continue the traversal as normal.

TRUNCATE 

For a pre-order depth-first visit, do not descend into children.

TERMINATE 

Terminate the traversal.

Definition at line 183 of file SymbolicExpression.h.

Function Documentation

◆ makeVariable() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeVariable ( const Type ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeVariable() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeVariable ( const Type ,
uint64_t  id,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeConstant()

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeConstant ( const Type ,
const Sawyer::Container::BitVector ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeIntegerVariable() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeIntegerVariable ( size_t  nBits,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeIntegerVariable() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeIntegerVariable ( size_t  nBits,
uint64_t  id,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeIntegerConstant() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeIntegerConstant ( size_t  nBits,
uint64_t  value,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeIntegerConstant() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeIntegerConstant ( const Sawyer::Container::BitVector ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeBooleanConstant()

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeBooleanConstant ( bool  ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeMemoryVariable() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeMemoryVariable ( size_t  addressWidth,
size_t  valueWidth,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeMemoryVariable() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeMemoryVariable ( size_t  addressWidth,
size_t  valueWidth,
uint64_t  id,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeFloatingPointVariable() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeFloatingPointVariable ( size_t  eb,
size_t  sb,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeFloatingPointVariable() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeFloatingPointVariable ( size_t  eb,
size_t  sb,
uint64_t  id,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeFloatingPointConstant() [1/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeFloatingPointConstant ( float  ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeFloatingPointConstant() [2/2]

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeFloatingPointConstant ( double  ,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeFloatingPointNan()

LeafPtr Rose::BinaryAnalysis::SymbolicExpression::makeFloatingPointNan ( size_t  eb,
size_t  sb,
const std::string &  comment = "",
unsigned  flags = 0 
)

Leaf constructor.

Constructs an expression leaf node. This is a wrapper around one of the "create" factory methods in Leaf.

◆ makeAdd()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeAdd ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeAsr()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeAsr ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeAnd()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeAnd ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeOr()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeOr ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeXor()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeXor ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeConcat()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeConcat ( const Ptr hi,
const Ptr lo,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeConvert()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeConvert ( const Ptr a,
const Type b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeEq()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeEq ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeExtract()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeExtract ( const Ptr begin,
const Ptr end,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeInvert()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeInvert ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsInfinite()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsInfinite ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsNan()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsNan ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsNeg()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsNeg ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsNorm()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsNorm ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsPos()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsPos ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsSubnorm()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsSubnorm ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIte()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIte ( const Ptr cond,
const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeLet()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeLet ( const Ptr a,
const Ptr b,
const Ptr c,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeLssb()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeLssb ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMax()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMax ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMin()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMin ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMssb()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMssb ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMultiplyAdd()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMultiplyAdd ( const Ptr a,
const Ptr b,
const Ptr c,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeNe()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeNe ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeNegate()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeNegate ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeRead()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeRead ( const Ptr mem,
const Ptr addr,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeReinterpret()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeReinterpret ( const Ptr a,
const Type b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeRol()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeRol ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeRor()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeRor ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeRound()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeRound ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSet() [1/2]

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSet ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSet() [2/2]

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSet ( const Ptr a,
const Ptr b,
const Ptr c,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedDiv()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedDiv ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignExtend()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignExtend ( const Ptr newSize,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedGe()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedGe ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedGt()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedGt ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeShl0()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeShl0 ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeShl1()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeShl1 ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeShr0()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeShr0 ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeShr1()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeShr1 ( const Ptr sa,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeIsSignedPos()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeIsSignedPos ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedLe()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedLe ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedLt()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedLt ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedMax()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedMax ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedMin()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedMin ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedMod()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedMod ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSignedMul()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSignedMul ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeSqrt()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeSqrt ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeDiv()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeDiv ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeExtend()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeExtend ( const Ptr newSize,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeGe()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeGe ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeGt()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeGt ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeLe()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeLe ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeLt()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeLt ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMod()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMod ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeMul()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeMul ( const Ptr a,
const Ptr b,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeWrite()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeWrite ( const Ptr mem,
const Ptr addr,
const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ makeZerop()

Ptr Rose::BinaryAnalysis::SymbolicExpression::makeZerop ( const Ptr a,
const SmtSolverPtr solver = SmtSolverPtr(),
const std::string &  comment = "",
unsigned  flags = 0 
)

Interior node constructor.

Constructs an interior node. This is a wrapper around one of the "create" factory methods in Interior. It interprets its operands as unsigned values unless the method has "Signed" in its name.

◆ hash()

Hash Rose::BinaryAnalysis::SymbolicExpression::hash ( const std::vector< Ptr > &  )

Hash zero or more expressions.

Computes the hash for each expression, then returns a single has which is a function of the individual hashes. The order of the expressions does not affect the returned hash.

References hash().

Referenced by hash().

◆ nNodes()

template<typename InputIterator >
uint64_t Rose::BinaryAnalysis::SymbolicExpression::nNodes ( InputIterator  begin,
InputIterator  end 
)

Counts the number of nodes.

Counts the total number of nodes in multiple expressions. The return value is a saturated sum, returning MAX_NNODES if an overflow occurs.

Definition at line 1540 of file SymbolicExpression.h.

References MAX_NNODES.

◆ nNodesUnique()

template<typename InputIterator >
uint64_t Rose::BinaryAnalysis::SymbolicExpression::nNodesUnique ( InputIterator  begin,
InputIterator  end 
)

Counts the number of unique nodes.

Counts the number of unique nodes across a number of expressions. Nodes shared between two expressions are counted only one time, whereas the Node::nnodes virtual method counts shared nodes multiple times.

Definition at line 1559 of file SymbolicExpression.h.

References CONTINUE, TERMINATE, and TRUNCATE.

◆ findCommonSubexpressions() [1/2]

std::vector< Ptr > Rose::BinaryAnalysis::SymbolicExpression::findCommonSubexpressions ( const std::vector< Ptr > &  )

Find common subexpressions.

This is similar to Node::findCommonSubexpressions except the analysis is over a collection of expressions rather than a single expression.

◆ findCommonSubexpressions() [2/2]

template<typename InputIterator >
std::vector< Ptr > Rose::BinaryAnalysis::SymbolicExpression::findCommonSubexpressions ( InputIterator  begin,
InputIterator  end 
)

Find common subexpressions.

This is similar to Node::findCommonSubexpressions except the analysis is over a collection of expressions rather than a single expression.

Definition at line 1600 of file SymbolicExpression.h.

References CONTINUE, and TRUNCATE.

◆ substitute()

template<class Substitution >
Ptr Rose::BinaryAnalysis::SymbolicExpression::substitute ( const Ptr src,
Substitution &  subber,
const SmtSolverPtr solver = SmtSolverPtr() 
)

On-the-fly substitutions.

This function uses a user-defined substitutor to generate values that are substituted into the specified expression. This operates by performing a depth-first search of the specified expression and calling the subber at each node. The subber is invoked with two arguments: an expression to be replaced, and an optional SMT solver for simplifications. It should return either the expression unmodified, or a new expression. The return value of the substitute function as a whole is either the original expression (if no substitutions were performed) or a new expression.

Definition at line 1633 of file SymbolicExpression.h.

References Rose::BinaryAnalysis::SymbolicExpression::Interior::children(), Rose::BinaryAnalysis::SymbolicExpression::Node::comment(), Rose::BinaryAnalysis::SymbolicExpression::Node::flags(), Rose::BinaryAnalysis::SymbolicExpression::Interior::getOperator(), Rose::BinaryAnalysis::SymbolicExpression::Interior::instance(), Rose::BinaryAnalysis::SymbolicExpression::Node::isInteriorNodeRaw(), Rose::BinaryAnalysis::SymbolicExpression::Interior::nChildren(), and substitute().

Referenced by substitute().

Variable Documentation

◆ serializeVariableIds

bool Rose::BinaryAnalysis::SymbolicExpression::serializeVariableIds
extern

Whether to serialize variable IDs.

If set, then all threads will coordinate so that variable IDs are allocated in a monotonic fashion. This should only be set when necessary in order to make test results more deterministic. The default is to clear, which means variable IDs are allocated from some number of pools in order to reduce lock contention.

Thread safety: This property is not thread safe. If reproducible results are desired, it should be set before any analysis begins.

◆ MAX_NNODES

const uint64_t Rose::BinaryAnalysis::SymbolicExpression::MAX_NNODES
extern

Maximum number of nodes that can be reported.

If nNodes returns this value then the size of the expressions could not be counted. This can happens when the expression contains a large number of common subexpressions.

Referenced by nNodes().