|
ROSE 0.11.145.354
|
Byte-addressable memory.
This class represents an entire state of memory via a list of memory cells. The memory cell list is sorted in reverse chronological order and addresses that satisfy a "must-alias" predicate are pruned so that only the must recent such memory cell is in the table.
A memory write operation prunes away any existing memory cell that must-alias the newly written address, then adds a new memory cell to the front of the memory cell list.
A memory read operation scans the memory cell list and returns the union of all possible matches.
Definition at line 181 of file IntervalSemantics.h.
#include <Rose/BinaryAnalysis/InstructionSemantics/IntervalSemantics.h>


Public Types | |
| using | Super = BaseSemantics::MemoryCellList |
| Base type. | |
| using | Ptr = MemoryStatePtr |
| Shared-ownership pointer. | |
Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList | |
| using | Super = MemoryCellState |
| Base type. | |
| using | Ptr = MemoryCellListPtr |
| Shared-ownership pointer. | |
Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState | |
| using | Super = MemoryState |
| Base type. | |
| using | Ptr = MemoryCellStatePtr |
| Shared-ownership pointer. | |
Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState | |
| typedef MemoryStatePtr | Ptr |
| Shared-ownership pointer. | |
Public Types inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace | |
| using | Ptr = AddressSpacePtr |
| Shared-ownership pointer. | |
| using | Purpose = AddressSpacePurpose |
| Purpose for the address space. | |
Public Member Functions | |
| virtual BaseSemantics::MemoryStatePtr | create (const BaseSemantics::MemoryCellPtr &protocell) const override |
| Virtual allocating constructor. | |
| virtual BaseSemantics::MemoryStatePtr | create (const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) const override |
| Virtual allocating constructor. | |
| virtual BaseSemantics::AddressSpacePtr | clone () const override |
| Deep-copy of this address space. | |
| virtual BaseSemantics::SValuePtr | readMemory (const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) override |
| Read a byte from memory. | |
| virtual BaseSemantics::SValuePtr | peekMemory (const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) override |
| Read a byte from memory without side effects. | |
| virtual void | writeMemory (const BaseSemantics::SValuePtr &addr, const BaseSemantics::SValuePtr &value, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) override |
| Write a byte to memory. | |
Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList | |
| virtual void | clear () override |
| Clear memory. | |
| virtual bool | merge (const AddressSpacePtr &other, RiscOperators *addrOps, RiscOperators *valOps) override |
| Merge address spaces for data flow analysis. | |
| virtual std::vector< MemoryCellPtr > | matchingCells (MemoryCell::Predicate &) const override |
| Find all matching cells. | |
| virtual std::vector< MemoryCellPtr > | leadingCells (MemoryCell::Predicate &) const override |
| Find leading matching cells. | |
| virtual void | eraseMatchingCells (MemoryCell::Predicate &) override |
| Remove all matching cells. | |
| virtual void | eraseLeadingCells (MemoryCell::Predicate &) override |
| Remove leading matching cells. | |
| virtual void | traverse (MemoryCell::Visitor &) override |
| Traverse and modify cells. | |
| virtual void | hash (Combinatorics::Hasher &, RiscOperators *addrOps, RiscOperators *valOps) const override |
| Hash this address space. | |
| virtual void | print (std::ostream &, Formatter &) const override |
| Print an address space. | |
| bool | mergeNoAliasing (const AddressSpacePtr &other, RiscOperators *addrOps, RiscOperators *valOps) |
| Merge two states without aliasing. | |
| bool | mergeWithAliasing (const AddressSpacePtr &other, RiscOperators *addrOps, RiscOperators *valOps) |
| Merge two states with aliasing. | |
| virtual bool | isAllPresent (const SValuePtr &address, size_t nBytes, RiscOperators *addrOps, RiscOperators *valOps) const |
| Predicate to determine whether all bytes are present. | |
| template<class Iterator > | |
| CellList | scan (Iterator &cursor, const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps) const |
| Scan cell list to find matching cells. | |
| virtual AddressSet | getWritersUnion (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps) override |
| Writers for an address. | |
| virtual AddressSet | getWritersIntersection (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps) override |
| Writers for an address. | |
| bool | occlusionsErased () const |
| Property: erase occluded cells. | |
| void | occlusionsErased (bool b) |
| Property: erase occluded cells. | |
| virtual const CellList & | get_cells () const |
| Returns the list of all memory cells. | |
| virtual CellList & | get_cells () |
| Returns the list of all memory cells. | |
Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState | |
| virtual void | updateReadProperties (const CellList &) |
| Adjust I/O properties after reading memory. | |
| virtual void | updateWriteProperties (const CellList &, InputOutputPropertySet) |
| Adjust I/O properties after writing memory. | |
| void | eraseNonWritten () |
| Erase cells that have no writers. | |
| std::vector< MemoryCellPtr > | allCells () const |
| All cells. | |
| virtual MemoryCellPtr | latestWrittenCell () const |
| Property: Cell most recently written. | |
| virtual void | latestWrittenCell (const MemoryCellPtr &) |
| Property: Cell most recently written. | |
Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState | |
| SValuePtr | get_addr_protoval () const |
| Return the address protoval. | |
| SValuePtr | get_val_protoval () const |
| Return the value protoval. | |
| MergerPtr | merger () const |
| Property: Merger. | |
| void | merger (const MergerPtr &) |
| Property: Merger. | |
| bool | byteRestricted () const |
| Indicates whether memory cell values are required to be eight bits wide. | |
| void | byteRestricted (bool) |
| Indicates whether memory cell values are required to be eight bits wide. | |
| ByteOrder::Endianness | get_byteOrder () const |
| Memory byte order. | |
| void | set_byteOrder (ByteOrder::Endianness) |
| Memory byte order. | |
Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace | |
| virtual SValuePtr | read (const AddressSpaceAddress &, const SValuePtr &dflt, RiscOperators &addrOps, RiscOperators &valOps) |
| Read a value from the address space. | |
| virtual SValuePtr | peek (const AddressSpaceAddress &, const SValuePtr &dflt, RiscOperators &addrOps, RiscOperators &valOps) |
| Read without causing side effects. | |
| virtual void | write (const AddressSpaceAddress &, const SValuePtr &value, RiscOperators &addrOps, RiscOperators &valOps) |
| Write a value to an address space. | |
| std::string | printableName () const |
| Printable name for this address space. | |
| Purpose | purpose () const |
| Property: Purpose of this address space. | |
| void | purpose (Purpose) |
| Property: Purpose of this address space. | |
| const std::string & | name () const |
| Property: Name for this address space. | |
| void | name (const std::string &) |
| Property: Name for this address space. | |
| void | print (std::ostream &, const std::string &prefix="") const |
| Print an address space. | |
| WithFormatter | with_format (Formatter &) |
| Used for printing address spaces with formatting. | |
| WithFormatter | operator+ (Formatter &) |
| Used for printing address spaces with formatting. | |
| WithFormatter | operator+ (const std::string &linePrefix) |
| Used for printing address spaces with formatting. | |
Static Public Member Functions | |
| static MemoryStatePtr | instance (const BaseSemantics::MemoryCellPtr &protocell) |
| Instantiate a new memory state with specified prototypical cells and values. | |
| static MemoryStatePtr | instance (const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) |
| Instantiate a new memory state with prototypical value. | |
Static Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList | |
| static MemoryCellListPtr | instance (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) |
| Instantiate a new prototypical memory state. | |
| static MemoryCellListPtr | instance (const MemoryCellPtr &protocell) |
| Instantiate a new memory state with prototypical memory cell. | |
| static MemoryCellListPtr | instance (const MemoryCellListPtr &other) |
| Instantiate a new copy of an existing memory state. | |
| static MemoryCellListPtr | promote (const BaseSemantics::AddressSpacePtr &m) |
| Promote a base address space pointer to a BaseSemantics::MemoryCellList pointer. | |
Static Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState | |
| static MemoryCellStatePtr | promote (const BaseSemantics::AddressSpacePtr &) |
| Promote a base address space pointer to a BaseSemantics::MemoryCellState pointer. | |
Static Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState | |
| static MemoryStatePtr | promote (const AddressSpacePtr &) |
Protected Member Functions | |
| MemoryState (const BaseSemantics::MemoryCellPtr &protocell) | |
| MemoryState (const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) | |
| MemoryState (const MemoryState &) | |
Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList | |
| MemoryCellList (const MemoryCellPtr &protocell) | |
| MemoryCellList (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) | |
| MemoryCellList (const MemoryCellList &other) | |
| virtual SValuePtr | mergeCellValues (const CellList &cells, const SValuePtr &dflt, RiscOperators *addrOps, RiscOperators *valOps) |
| virtual AddressSet | mergeCellWriters (const CellList &cells) |
| virtual InputOutputPropertySet | mergeCellProperties (const CellList &cells) |
| virtual MemoryCellPtr | insertReadCell (const SValuePtr &addr, const SValuePtr &value) |
| virtual MemoryCellPtr | insertReadCell (const SValuePtr &addr, const SValuePtr &value, const AddressSet &writers, const InputOutputPropertySet &props) |
Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState | |
| MemoryCellState (const MemoryCellPtr &protocell) | |
| MemoryCellState (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) | |
| MemoryCellState (const MemoryCellState &other) | |
Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState | |
| MemoryState (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) | |
| MemoryState (const MemoryStatePtr &other) | |
Protected Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace | |
| AddressSpace (Purpose, const std::string &name) | |
| AddressSpace (const AddressSpace &) | |
| AddressSpace & | operator= (const AddressSpace &)=delete |
Additional Inherited Members | |
Protected Attributes inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList | |
| CellList | cells |
| bool | occlusionsErased_ |
Protected Attributes inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState | |
| MemoryCellPtr | protocell |
| MemoryCellPtr | latestWrittenCell_ |
| using Rose::BinaryAnalysis::InstructionSemantics::IntervalSemantics::MemoryState::Super = BaseSemantics::MemoryCellList |
Base type.
Definition at line 184 of file IntervalSemantics.h.
| using Rose::BinaryAnalysis::InstructionSemantics::IntervalSemantics::MemoryState::Ptr = MemoryStatePtr |
Shared-ownership pointer.
Definition at line 187 of file IntervalSemantics.h.
|
static |
Instantiate a new memory state with prototypical value.
This constructor uses BaseSemantics::MemoryCell as the cell type. The address protoval and value protoval are usually the same (or at least the same dynamic type).
|
overridevirtual |
Virtual allocating constructor.
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.
|
overridevirtual |
Virtual allocating constructor.
Allocates and constructs a new MemoryState object having the same dynamic type as this object. A prototypical SValue must be supplied and will be used to construct any additional SValue objects needed during the operation of a MemoryState. Two prototypical values are supplied, one for addresses and another for values stored at those addresses, although they will almost always be the same.
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.
|
overridevirtual |
Deep-copy of this address space.
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.
|
overridevirtual |
Read a byte from memory.
In order to read a multi-byte value, use RiscOperators::readMemory().
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.
|
overridevirtual |
Read a byte from memory without side effects.
In order to read a multi-byte value, use RiscOperators::peekMemory().
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.
|
overridevirtual |
Write a byte to memory.
In order to write a multi-byte value, use RiscOperators::writeMemory().
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList.