ROSE 0.11.145.192
|
Cell-based memory state.
This is the base class for cell-based memory states.
Definition at line 21 of file BaseSemantics/MemoryCellState.h.
#include <Rose/BinaryAnalysis/InstructionSemantics/BaseSemantics/MemoryCellState.h>
Public Types | |
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 void | clear () override |
Clear memory. | |
virtual AddressSet | getWritersUnion (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Writers for an address. | |
virtual AddressSet | getWritersIntersection (const SValuePtr &addr, size_t nBits, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Writers for an address. | |
virtual std::vector< MemoryCellPtr > | matchingCells (MemoryCell::Predicate &) const =0 |
Find all matching cells. | |
virtual std::vector< MemoryCellPtr > | leadingCells (MemoryCell::Predicate &) const =0 |
Find leading matching cells. | |
virtual void | eraseMatchingCells (MemoryCell::Predicate &)=0 |
Remove all matching cells. | |
virtual void | eraseLeadingCells (MemoryCell::Predicate &)=0 |
Remove leading matching cells. | |
virtual void | traverse (MemoryCell::Visitor &)=0 |
Traverse and modify cells. | |
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 | |
virtual MemoryStatePtr | create (const SValuePtr &addrProtoval, const SValuePtr &valProtoval) const =0 |
Virtual allocating constructor. | |
SValuePtr | get_addr_protoval () const |
Return the address protoval. | |
SValuePtr | get_val_protoval () const |
Return the value protoval. | |
virtual SValuePtr | readMemory (const SValuePtr &address, const SValuePtr &dflt, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Read a value from memory. | |
virtual SValuePtr | peekMemory (const SValuePtr &address, const SValuePtr &dflt, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Read a value from memory without side effects. | |
virtual void | writeMemory (const SValuePtr &addr, const SValuePtr &value, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Write a value to memory. | |
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 Ptr | clone () const =0 |
Deep-copy of this address space. | |
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. | |
virtual void | hash (Combinatorics::Hasher &, RiscOperators *addrOps, RiscOperators *valOps) const =0 |
Hash this address space. | |
virtual bool | merge (const AddressSpacePtr &other, RiscOperators *addrOps, RiscOperators *valOps)=0 |
Merge address spaces for data flow analysis. | |
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. | |
virtual void | print (std::ostream &, Formatter &) const =0 |
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 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 | |
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 |
Protected Attributes | |
MemoryCellPtr | protocell |
MemoryCellPtr | latestWrittenCell_ |
using Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::Super = MemoryState |
Base type.
Definition at line 24 of file BaseSemantics/MemoryCellState.h.
using Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellState::Ptr = MemoryCellStatePtr |
Shared-ownership pointer.
Definition at line 27 of file BaseSemantics/MemoryCellState.h.
|
static |
Promote a base address space pointer to a BaseSemantics::MemoryCellState pointer.
The memory state m
must have a BaseSemantics::MemoryCellState dynamic type.
|
overridevirtual |
Clear memory.
Removes all memory cells from this memory state.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
Reimplemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Writers for an address.
Returns the set of all writers that wrote to the specified address or any address that might alias the specified address. Memory states that don't normally compute aliases (e.g., MemoryCellMap) return only the writers for the specified address, not any aliases, and in this case getWritersUnion and getWritersIntersection return the same set.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Writers for an address.
Returns the set of all writers that wrote to the specified address and any address that might alias the specified address. Memory states that don't normally compute aliases (e.g., MemoryCellMap) return only the writers for the specified address, not any aliases, and in this case getWritersUnion and getWritersIntersection return the same set.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Find all matching cells.
Returns a vector of cells for which the predicate
returns true.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Find leading matching cells.
Returns the vector of cells obtained by invoking the predicate on each cell and returning those leading cells for which the predicate is true. The first cell for which the predicate is false terminates the traversal and does not appear in the return value.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Remove all matching cells.
Traverses the memory cells and removes those for which the predicate returns true.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Remove leading matching cells.
Traverses the memory cells and removes those for which the predicate returns true. The traversal is terminated the first time the predicate returns false.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
pure virtual |
Traverse and modify cells.
Traverse cells and optionally modify them.
Implemented in Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellList, and Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryCellMap.
|
virtual |
Adjust I/O properties after reading memory.
Adjust I/O properties in the specified cells to make it look like they were just read. This adds the READ property and may also add READ_AFTER_WRITE, READ_BEFORE_WRITE, and/or READ_UNINITIALIZED. This should be called automatically by each BaseSemantics::MemoryState::readMemory implementation.
|
virtual |
Adjust I/O properties after writing memory.
Adjust I/O properties in the specified cells to make it look like they were just read. This adds the specified properties to the list of I/O properties for the cell.
|
protected |
Definition at line 30 of file BaseSemantics/MemoryCellState.h.
|
protected |
Definition at line 31 of file BaseSemantics/MemoryCellState.h.