ROSE 0.11.145.192
|
Null memory.
This memory state does not store any values. Read operations always return (new) undefined values.
Definition at line 161 of file NullSemantics.h.
#include <Rose/BinaryAnalysis/InstructionSemantics/NullSemantics.h>
Public Types | |
using | Super = BaseSemantics::MemoryState |
Base type. | |
using | Ptr = MemoryStatePtr |
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::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) const override |
Virtual allocating constructor. | |
virtual BaseSemantics::AddressSpacePtr | clone () const override |
Deep-copy of this address space. | |
virtual void | clear () override |
Clear memory. | |
virtual BaseSemantics::SValuePtr | readMemory (const BaseSemantics::SValuePtr &, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *, BaseSemantics::RiscOperators *) override |
Read a value from memory. | |
virtual void | writeMemory (const BaseSemantics::SValuePtr &, const BaseSemantics::SValuePtr &, BaseSemantics::RiscOperators *, BaseSemantics::RiscOperators *) override |
Write a value to memory. | |
virtual BaseSemantics::SValuePtr | peekMemory (const BaseSemantics::SValuePtr &, const BaseSemantics::SValuePtr &dflt, BaseSemantics::RiscOperators *, BaseSemantics::RiscOperators *) override |
Read a value from memory without side effects. | |
virtual void | hash (Combinatorics::Hasher &, BaseSemantics::RiscOperators *, BaseSemantics::RiscOperators *) const override |
Hash this address space. | |
virtual void | print (std::ostream &, BaseSemantics::Formatter &) const override |
Print an address space. | |
virtual bool | merge (const BaseSemantics::AddressSpacePtr &other, BaseSemantics::RiscOperators *addrOps, BaseSemantics::RiscOperators *valOps) override |
Merge address spaces for data flow analysis. | |
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::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) |
static MemoryStatePtr | promote (const BaseSemantics::AddressSpacePtr &) |
Static Public Member Functions inherited from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState | |
static MemoryStatePtr | promote (const AddressSpacePtr &) |
Protected Member Functions | |
MemoryState (const BaseSemantics::SValuePtr &addrProtoval, const BaseSemantics::SValuePtr &valProtoval) | |
MemoryState (const MemoryStatePtr &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 |
using Rose::BinaryAnalysis::InstructionSemantics::NullSemantics::MemoryState::Super = BaseSemantics::MemoryState |
Base type.
Definition at line 164 of file NullSemantics.h.
Shared-ownership pointer.
Definition at line 167 of file NullSemantics.h.
|
virtual |
Reimplemented from Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
|
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.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
|
overridevirtual |
Deep-copy of this address space.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace.
|
inlineoverridevirtual |
Clear memory.
Removes all memory cells from this memory state.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
Definition at line 188 of file NullSemantics.h.
|
overridevirtual |
Read a value from memory.
Consults the memory represented by this MemoryState object and returns a semantic value. Depending on the semantic domain, the value can be a value that is already stored in the memory state, a supplied default value, a new value constructed from some combination of existing values and/or the default value, or anything else. For instance, in a symbolic domain the address
could alias multiple existing memory locations and the implementation may choose to return a McCarthy expression. Additional data (such as SMT solvers) may be passed via the RiscOperators argument.
The size of the value being read does not necessarily need to be equal to the size of values stored in the memory state, though it typically is(1). For instance, an implementation may allow reading a 32-bit little endian value from a memory state that stores only bytes. A RiscOperators object is provided for use in these situations.
In order to support cases where an address does not match any existing location, the dflt
value can be used to initialize a new memory location. The manner in which the default is used depends on the implementation. In any case, the width of the dflt
value determines how much to read.
Footnote 1: A MemoryState::readMemory() call is the last in a sequence of delegations starting with RiscOperators::readMemory(). The designers of the MemoryState, State, and RiscOperators subclasses will need to coordinate to decide which layer should handle concatenating values from individual memory locations.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
|
overridevirtual |
Write a value to memory.
Consults the memory represented by this MemoryState object and possibly inserts the specified value. The details of how a value is inserted into a memory state depends entirely on the implementation in a subclass and will probably be different for each semantic domain.
A MemoryState::writeMemory() call is the last in a sequence of delegations starting with RiscOperators::writeMemory(). The designers of the MemoryState, State, and RiscOperators will need to coordinate to decide which layer (if any) should handle splitting a multi-byte value into multiple memory locations.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
|
overridevirtual |
Read a value from memory without side effects.
This is similar to readMemory except there are no side effects. The memory state is not modified by this function.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::MemoryState.
|
overridevirtual |
Hash this address space.
Hashes this address space by appending its data to the specified hasher. The goal is to identify when two address spaces are the "same" and allow certain kinds of analyses to take shortcuts. The address space purpose and name are not included in the hash. Separate RISC operators are passed for the addresses and values of this address space and are used if the hashing requires any operations on the addresses or values.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace.
|
overridevirtual |
Print an address space.
The output most likely occupies more than one line and each emitted line will be terminated with a line feed.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace.
|
overridevirtual |
Merge address spaces for data flow analysis.
Merges the other
address space into this address space, returning true if this space changed.
Implements Rose::BinaryAnalysis::InstructionSemantics::BaseSemantics::AddressSpace.