1 #ifndef Rose_SymbolicSemantics2_H
2 #define Rose_SymbolicSemantics2_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
6 #ifndef __STDC_FORMAT_MACROS
7 #define __STDC_FORMAT_MACROS
11 #include "BaseSemantics2.h"
12 #include "Cxx_GrammarSerialization.h"
13 #include "BinarySmtSolver.h"
14 #include "BinarySymbolicExpr.h"
15 #include "RegisterStateGeneric.h"
16 #include "MemoryCellList.h"
17 #include "MemoryCellMap.h"
19 #include <boost/serialization/access.hpp>
20 #include <boost/serialization/base_object.hpp>
21 #include <boost/serialization/export.hpp>
22 #include <boost/serialization/set.hpp>
29 namespace InstructionSemantics2 {
49 namespace SymbolicSemantics {
57 typedef std::set<SgAsmInstruction*> InsnSet;
64 namespace AllowSideEffects {
84 typedef MergerPtr
Ptr;
94 retval->setSizeLimit(n);
211 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
213 friend class boost::serialization::access;
216 void serialize(S &s,
const unsigned ) {
217 roseAstSerializationRegistration(s);
218 s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Super);
219 s & BOOST_SERIALIZATION_NVP(expr);
220 s & BOOST_SERIALIZATION_NVP(defs);
228 explicit SValue(
size_t nbits):
BaseSemantics::SValue(nbits) {
231 SValue(
size_t nbits, uint64_t number):
BaseSemantics::SValue(nbits) {
285 SValuePtr retval(
new SValue(*
this));
286 if (new_width!=0 && new_width!=retval->nBits())
287 retval->set_width(new_width);
300 ASSERT_not_null(retval);
307 virtual bool isBottom() const ROSE_OVERRIDE;
311 virtual
void hash(Combinatorics::Hasher&) const override;
322 ASSERT_require(nbits==
nBits());
326 return expr->isIntegerConstant();
329 virtual uint64_t
get_number() const ROSE_OVERRIDE;
344 virtual SValuePtr
substitute(const SValuePtr &from, const SValuePtr &to, const
SmtSolverPtr &solver) const;
379 ASSERT_not_null(new_expr);
381 width = new_expr->nBits();
474 const MemoryCellList::CellList &cells) = 0;
493 const CellList &cells) ROSE_OVERRIDE;
500 const CellList &cells) ROSE_OVERRIDE;
511 const CellList &cells) ROSE_OVERRIDE;
520 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
522 friend class boost::serialization::access;
525 void serialize(S &s,
const unsigned ) {
526 s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Super);
535 : cell_compressor(&cc_choice) {}
538 :
BaseSemantics::MemoryCellList(protocell), cell_compressor(&cc_choice) {}
541 :
BaseSemantics::MemoryCellList(addrProtoval, valProtoval), cell_compressor(&cc_choice) {}
543 MemoryListState(
const MemoryListState &other)
544 :
BaseSemantics::MemoryCellList(other), cell_compressor(other.cell_compressor) {}
562 static MemoryListStatePtr
instance(
const MemoryListStatePtr &other) {
573 return instance(addrProtoval, valProtoval);
592 MemoryListStatePtr retval = boost::dynamic_pointer_cast<
MemoryListState>(x);
593 ASSERT_not_null(retval);
625 AllowSideEffects::Flag allowSideEffects);
669 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
671 friend class boost::serialization::access;
674 void serialize(S &s,
const unsigned ) {
675 s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Super);
706 static MemoryMapStatePtr
instance(
const MemoryMapStatePtr &other) {
717 return instance(addrProtoval, valProtoval);
736 MemoryMapStatePtr retval = boost::dynamic_pointer_cast<
MemoryMapState>(x);
737 ASSERT_not_null(retval);
756 typedef MemoryListState MemoryState;
757 typedef MemoryListStatePtr MemoryStatePtr;
763 typedef BaseSemantics::State State;
816 size_t trimThreshold_;
817 bool reinterpretMemoryReads_;
818 bool reinterpretRegisterReads_;
823 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
825 friend class boost::serialization::access;
828 void serialize(S &s,
const unsigned ) {
829 s & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Super);
830 s & BOOST_SERIALIZATION_NVP(omit_cur_insn);
831 s & BOOST_SERIALIZATION_NVP(computingDefiners_);
832 s & BOOST_SERIALIZATION_NVP(computingMemoryWriters_);
833 s & BOOST_SERIALIZATION_NVP(computingRegisterWriters_);
834 s & BOOST_SERIALIZATION_NVP(trimThreshold_);
843 computingRegisterWriters_(
TRACK_LATEST_WRITER), trimThreshold_(0), reinterpretMemoryReads_(
true),
844 reinterpretRegisterReads_(
true) {}
849 reinterpretMemoryReads_(
true), reinterpretRegisterReads_(
true) {
851 ASSERT_always_not_null(protoval);
853 "SymbolicSemantics supports only symbolic SValue types or derivatives thereof");
859 reinterpretMemoryReads_(
true), reinterpretRegisterReads_(
true) {
861 ASSERT_always_not_null(state);
862 ASSERT_always_not_null(state->registerState());
863 ASSERT_always_not_null2(boost::dynamic_pointer_cast<RegisterState>(state->registerState()),
864 "SymbolicSemantics supports only RegisterStateGeneric or derivatives thereof");
865 ASSERT_always_not_null(state->protoval());
866 ASSERT_always_not_null2(state->protoval().dynamicCast<
SValue>(),
867 "SymbolicSemantics supports only symbolic SValue types or derivatives thereof");
914 RiscOperatorsPtr retval = boost::dynamic_pointer_cast<
RiscOperators>(x);
915 ASSERT_not_null(retval);
923 SValuePtr retval =
SValue::promote(BaseSemantics::RiscOperators::boolean_(b));
925 retval->defined_by(currentInstruction());
930 SValuePtr retval =
SValue::promote(BaseSemantics::RiscOperators::number_(nbits, value));
932 retval->defined_by(currentInstruction());
940 SValuePtr svalueExpr(
const ExprPtr &expr,
const InsnSet &defs=InsnSet()) {
942 newval->set_expression(expr);
943 newval->set_defining_instructions(defs);
947 SValuePtr svalueUndefined(
size_t nbits) {
951 SValuePtr svalueBottom(
size_t nbits) {
955 SValuePtr svalueUnspecified(
size_t nbits) {
959 SValuePtr svalueNumber(
size_t nbits, uint64_t value) {
963 SValuePtr svalueBoolean(
bool b) {
968 SValuePtr svalue_number(
size_t nbits, uint64_t value) ROSE_DEPRECATED(
"use svalueNumber instead") {
969 return svalueNumber(nbits, value);
973 SValuePtr svalue_boolean(
bool b) ROSE_DEPRECATED(
"use svalueBoolean instead") {
974 return svalueBoolean(b);
978 SValuePtr svalue_unspecified(
size_t nbits) ROSE_DEPRECATED(
"use svalueUnspecified instead") {
979 return svalueUnspecified(nbits);
983 SValuePtr svalue_bottom(
size_t nbits) ROSE_DEPRECATED(
"use svalueBottom instead") {
984 return svalueBottom(nbits);
988 SValuePtr svalue_undefined(
size_t nbits) ROSE_DEPRECATED(
"use svalueUndefined instead") {
989 return svalueUndefined(nbits);
993 SValuePtr svalue_expr(
const ExprPtr &expr,
const InsnSet &defs=InsnSet()) ROSE_DEPRECATED("use svalueExpr instead") {
994 return svalueExpr(expr, defs);
1070 bool getset_omit_cur_insn(
bool b) {
bool retval = omit_cur_insn; omit_cur_insn=b;
return retval; }
1159 virtual void substitute(
const SValuePtr &from,
const SValuePtr &to);
1181 virtual void interrupt(
int majr,
int minr) ROSE_OVERRIDE;
1190 size_t begin_bit,
size_t end_bit) ROSE_OVERRIDE;
1254 AllowSideEffects::Flag);
1262 #ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
virtual BaseSemantics::SValuePtr signedModulo(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Calculates modulo with signed values.
Sawyer::SharedPointer< class Merger > MergerPtr
Shared-ownership pointer for a merge control object.
void computingDefiners(DefinersMode m)
Property: Track which instructions define a semantic value.
InsnSet defs
Instructions defining this value.
virtual void print(std::ostream &, BaseSemantics::Formatter &) const ROSE_OVERRIDE
Print a value to a stream using default format.
virtual void writeMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &data, const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE
Writes a value to memory.
static RegisterStateGenericPtr instance(const SValuePtr &protoval, const RegisterDictionary *regdict)
Instantiate a new register state.
boost::shared_ptr< class MemoryCell > MemoryCellPtr
Shared-ownership pointer to a semantic memory cell.
virtual BaseSemantics::SValuePtr copy(size_t new_width=0) const ROSE_OVERRIDE
Create a new value from an existing value, changing the width if new_width is non-zero.
boost::shared_ptr< RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to a RISC operators object.
virtual void set_defining_instructions(const InsnSet &new_defs)
Set defining instructions.
bool reinterpretMemoryReads() const
Property: Reinterpret data as unsigned integers when reading from memory or registers.
static SValuePtr instance_integer(size_t nbits, uint64_t value)
Instantiate a new concrete value.
Leaf node of an expression tree for instruction semantics.
Defines RISC operators for the SymbolicSemantics domain.
boost::shared_ptr< class RegisterStateGeneric > RegisterStateGenericPtr
Shared-ownership pointer to generic register states.
virtual BaseSemantics::SValuePtr addWithCarries(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_, const BaseSemantics::SValuePtr &c_, BaseSemantics::SValuePtr &carry_out) ROSE_OVERRIDE
Used for printing RISC operators with formatting.
virtual void set_expression(const SValuePtr &source)
Changes the expression stored in the value.
static MemoryMapStatePtr promote(const BaseSemantics::MemoryStatePtr &x)
Recasts a base pointer to a symbolic memory state.
Interior node of an expression tree for instruction semantics.
virtual bool must_equal(const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual API.
CellCompressor * cell_compressor
Callback when a memory read aliases multiple memory cells.
static CellCompressorChoice cc_choice
The default cell compressor.
static RiscOperatorsPtr instance(const BaseSemantics::StatePtr &state, const SmtSolverPtr &solver=SmtSolverPtr())
Instantiates a new RiscOperators object with specified state.
virtual SValuePtr substitute(const SValuePtr &from, const SValuePtr &to, const SmtSolverPtr &solver) const
Substitute one value for another throughout a value.
virtual BaseSemantics::SValuePtr filterResult(const BaseSemantics::SValuePtr &)
Filters results from RISC operators.
virtual BaseSemantics::SValuePtr signedDivide(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Divides two signed values.
virtual void set_comment(const std::string &) const ROSE_OVERRIDE
Some subclasses support the ability to add comments to values.
Base class for machine instructions.
boost::shared_ptr< class RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to symbolic RISC operations.
virtual BaseSemantics::MemoryStatePtr clone() const ROSE_OVERRIDE
Virtual copy constructor.
virtual BaseSemantics::MemoryStatePtr create(const BaseSemantics::MemoryCellPtr &protocell) const ROSE_OVERRIDE
Virtual constructor.
virtual uint64_t get_number() const ROSE_OVERRIDE
Virtual API.
virtual void defined_by(SgAsmInstruction *insn, const InsnSet &set1, const InsnSet &set2)
Adds instructions to the list of defining instructions.
boost::shared_ptr< MemoryState > MemoryStatePtr
Shared-ownership pointer to a memory state.
LeafPtr makeIntegerConstant(size_t nBits, uint64_t value, const std::string &comment="", unsigned flags=0)
Leaf constructor.
boost::shared_ptr< State > StatePtr
Shared-ownership pointer to a semantic state.
virtual bool may_equal(const BaseSemantics::SValuePtr &other, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual API.
static RiscOperatorsPtr instance(const RegisterDictionary *regdict, const SmtSolverPtr &solver=SmtSolverPtr())
Instantiates a new RiscOperators object and configures it to use semantic values and states that are ...
void computingRegisterWriters(WritersMode m)
Property: Track latest writer to each register.
virtual bool is_number() const ROSE_OVERRIDE
Virtual API.
Functor for handling a memory read whose address matches more than one memory cell.
virtual size_t add_defining_instructions(const SValuePtr &source)
Adds definitions to the list of defining instructions.
static SValuePtr promote(const BaseSemantics::SValuePtr &v)
Promote a base value to a SymbolicSemantics value.
virtual BaseSemantics::RiscOperatorsPtr create(const BaseSemantics::SValuePtr &protoval, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual allocating constructor.
Holds a value or nothing.
Save only the latest definer.
static const unsigned UNSPECIFIED
Value is somehow unspecified.
virtual void set_defining_instructions(const SValuePtr &source)
Set defining instructions.
void set_cell_compressor(CellCompressor *cc)
Callback for handling a memory read whose address matches more than one memory cell.
LeafPtr makeIntegerVariable(size_t nBits, const std::string &comment="", unsigned flags=0)
Leaf constructor.
static RiscOperatorsPtr promote(const BaseSemantics::RiscOperatorsPtr &x)
Run-time promotion of a base RiscOperators pointer to symbolic operators.
virtual BaseSemantics::SValuePtr number_(size_t nbits, uint64_t value) const ROSE_OVERRIDE
Create a new concrete semantic value.
Type of symbolic expression.
virtual void interrupt(int majr, int minr) ROSE_OVERRIDE
Invoked for instructions that cause an interrupt.
virtual SValuePtr protoval() const
Property: Prototypical semantic value.
void reinterpretRegisterReads(bool b)
Property: Reinterpret data as unsigned integers when reading from memory or registers.
virtual BaseSemantics::SValuePtr signedMultiply(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Multiplies two signed values.
virtual void defined_by(SgAsmInstruction *insn)
Adds instructions to the list of defining instructions.
Main namespace for the ROSE library.
Functor for handling a memory read whose address matches more than one memory cell.
virtual void set_expression(const ExprPtr &new_expr)
Changes the expression stored in the value.
size_t setSizeLimit() const
Property: Maximum set size.
static MemoryListStatePtr promote(const BaseSemantics::MemoryStatePtr &x)
Recasts a base pointer to a symbolic memory state.
static MemoryListStatePtr instance(const BaseSemantics::MemoryCellPtr &protocell)
Instantiates a new memory state having specified prototypical cells and value.
virtual bool isBottom() const ROSE_OVERRIDE
Determines whether a value is a data-flow bottom.
virtual BaseSemantics::MemoryStatePtr create(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) const ROSE_OVERRIDE
Virtual constructor.
Reference-counting intrusive smart pointer.
void reinterpretMemoryReads(bool b)
Property: Reinterpret data as unsigned integers when reading from memory or registers.
virtual BaseSemantics::SValuePtr readRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt) ROSE_OVERRIDE
Reads a value from a register.
virtual void writeRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Writes a value to a register.
static SValuePtr instance_bottom(size_t nbits)
Instantiate a new data-flow bottom value of specified width.
WritersMode computingMemoryWriters() const
Property: Track which instructions write to each memory location.
static MemoryMapStatePtr instance(const BaseSemantics::MemoryCellPtr &protocell)
Instantiates a new memory state having specified prototypical cells and value.
Controls state merge operations.
virtual SymbolicExpr::Type sgTypeToSymbolicType(SgAsmType *)
Convert a SgAsmType to a symbolic type.
static MemoryMapStatePtr instance(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval)
Instantiates a new memory state having specified prototypical value.
Save only the latest writer.
DefinersMode
How to update the list of definers stored in each semantic value.
Controls merging of symbolic values.
virtual Sawyer::Optional< BaseSemantics::SValuePtr > createOptionalMerge(const BaseSemantics::SValuePtr &other, const BaseSemantics::MergerPtr &, const SmtSolverPtr &) const ROSE_OVERRIDE
Possibly create a new value by merging two existing values.
void computingMemoryWriters(WritersMode m)
Property: Track which instructions write to each memory location.
Base classes for instruction semantics.
ExprPtr expr
The symbolic expression for this value.
static const unsigned BOTTOM
Value represents bottom in dataflow analysis.
WritersMode computingRegisterWriters() const
Property: Track latest writer to each register.
static SValuePtr instance_undefined(size_t nbits)
Instantiate a new undefined value of specified width.
void setSizeLimit(size_t n)
Property: Maximum set size.
Describes (part of) a physical CPU register.
static Ptr instance(size_t n)
Allocating constructor.
Functor for handling a memory read that found more than one cell that might alias the requested addre...
boost::shared_ptr< class MemoryMapState > MemoryMapStatePtr
Shared-ownership pointer to symbolic memory state.
virtual BaseSemantics::MemoryStatePtr create(const BaseSemantics::MemoryCellPtr &protocell) const
Virtual constructor.
static SValuePtr instance()
Instantiate a new prototypical value.
virtual BaseSemantics::RiscOperatorsPtr create(const BaseSemantics::StatePtr &state, const SmtSolverPtr &solver=SmtSolverPtr()) const ROSE_OVERRIDE
Virtual allocating constructor.
virtual const InsnSet & get_defining_instructions() const
Returns the set of instructions that defined this value.
static MemoryListStatePtr instance(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval)
Instantiates a new memory state having specified prototypical value.
DefinersMode computingDefiners() const
Property: Track which instructions define a semantic value.
Base class for semantic values.
virtual std::string get_comment() const ROSE_OVERRIDE
Some subclasses support the ability to add comments to values.
virtual const ExprPtr & get_expression() const
Returns the expression stored in this value.
Simple map-based memory state.
bool reinterpretRegisterReads() const
Property: Reinterpret data as unsigned integers when reading from memory or registers.
static RiscOperatorsPtr instance(const BaseSemantics::SValuePtr &protoval, const SmtSolverPtr &solver=SmtSolverPtr())
Instantiates a new RiscOperators object with specified prototypical values.
virtual void substitute(const SValuePtr &from, const SValuePtr &to)
Substitute all occurrences of from with to in the current state.
WritersMode
How to update the list of writers stored at each abstract location.
Sawyer::SharedPointer< class SValue > SValuePtr
Shared-ownership pointer for symbolic semantic value.
SharedPointer< U > dynamicCast() const
Dynamic cast.
Base class for most instruction semantics RISC operators.
CellCompressor * get_cell_compressor() const
Callback for handling a memory read whose address matches more than one memory cell.
virtual BaseSemantics::SValuePtr unsignedMultiply(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Multiply two unsigned values.
virtual BaseSemantics::SValuePtr negate(const BaseSemantics::SValuePtr &a_) ROSE_OVERRIDE
Two's complement.
virtual void set_width(size_t nbits) ROSE_OVERRIDE
Virtual API.
virtual void hash(Combinatorics::Hasher &) const override
Hash this semantic value.
virtual BaseSemantics::MemoryStatePtr create(const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) const ROSE_OVERRIDE
Virtual constructor.
virtual BaseSemantics::SValuePtr unspecified_(size_t nbits) const ROSE_OVERRIDE
Create a new unspecified semantic value.
virtual BaseSemantics::SValuePtr unsignedDivide(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Divides two unsigned values.
std::list< MemoryCellPtr > CellList
List of memory cells.
size_t nBits() const
Property: value width.
Base class for binary types.
size_t trimThreshold() const
Property: Maximum size of expressions.
Type of values manipulated by the SymbolicSemantics domain.
virtual void writeMemory(const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &value, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Write a byte to memory.
virtual BaseSemantics::SValuePtr peekMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt) ROSE_OVERRIDE
Read memory without side effects.
static Ptr instance()
Allocating constructor.
virtual void defined_by(SgAsmInstruction *insn, const InsnSet &set1)
Adds instructions to the list of defining instructions.
static SValuePtr instance_unspecified(size_t nbits)
Instantiate a new unspecified value of specified width.
virtual BaseSemantics::SValuePtr reinterpret(const BaseSemantics::SValuePtr &, SgAsmType *) ROSE_OVERRIDE
Reinterpret an expression as a different type.
virtual BaseSemantics::SValuePtr boolean_(bool value) const ROSE_OVERRIDE
Create a new, Boolean value.
virtual CellKey generateCellKey(const BaseSemantics::SValuePtr &addr_) const ROSE_OVERRIDE
Generate a cell lookup key.
virtual BaseSemantics::SValuePtr readMemory(const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Read a byte from memory.
virtual BaseSemantics::SValuePtr undefined_(size_t nbits) const ROSE_OVERRIDE
Create a new undefined semantic value.
virtual size_t add_defining_instructions(const InsnSet &to_add)
Adds definitions to the list of defining instructions.
static MemoryMapStatePtr instance(const MemoryMapStatePtr &other)
Instantiates a new deep copy of an existing state.
Base class for symbolic expression nodes.
A RegisterState for any architecture.
virtual BaseSemantics::SValuePtr bottom_(size_t nbits) const ROSE_OVERRIDE
Data-flow bottom value.
virtual BaseSemantics::SValuePtr fpConvert(const BaseSemantics::SValuePtr &a, SgAsmFloatType *aType, SgAsmFloatType *retType) ROSE_OVERRIDE
Convert from one floating-point type to another.
virtual BaseSemantics::SValuePtr unsignedModulo(const BaseSemantics::SValuePtr &a_, const BaseSemantics::SValuePtr &b_) ROSE_OVERRIDE
Calculates modulo with unsigned values.
Defines registers available for a particular architecture.
virtual SmtSolverPtr solver() const
Property: Satisfiability module theory (SMT) solver.
virtual BaseSemantics::MemoryStatePtr clone() const ROSE_OVERRIDE
Virtual copy constructor.
virtual const std::string & name() const
Property: Name used for debugging.
void trimThreshold(size_t n)
Property: Maximum size of expressions.
virtual void defined_by(SgAsmInstruction *insn, const InsnSet &set1, const InsnSet &set2, const InsnSet &set3)
Adds instructions to the list of defining instructions.
Simple list-based memory state.
static MemoryListStatePtr instance(const MemoryListStatePtr &other)
Instantiates a new deep copy of an existing state.
MergerPtr Ptr
Shared-ownership pointer for a Merger object.
virtual BaseSemantics::SValuePtr peekMemory(const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) ROSE_OVERRIDE
Read a byte from memory with no side effects.
Functor for handling a memory read whose address matches more than one memory cell.
virtual BaseSemantics::SValuePtr readMemory(RegisterDescriptor segreg, const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, const BaseSemantics::SValuePtr &cond) ROSE_OVERRIDE
Reads a value from memory.
virtual BaseSemantics::SValuePtr peekRegister(RegisterDescriptor reg, const BaseSemantics::SValuePtr &dflt) ROSE_OVERRIDE
Obtain a register value without side effects.
boost::shared_ptr< RegisterState > RegisterStatePtr
Shared-ownership pointer to a register state.
static SgAsmFloatType * sgIsIeee754(SgAsmType *)
Tests whether a SgAsmType is an IEEE-754 floating-point type.
std::shared_ptr< class SmtSolver > SmtSolverPtr
Reference-counting pointer for SMT solvers.
uint64_t CellKey
Key used to look up memory cells.
boost::shared_ptr< class MemoryListState > MemoryListStatePtr
Shared-ownership pointer for symbolic list-based memory state.