Description

Byte-addressable memory.

This class represents an entire state of memory via a map of memory cells. The cells are indexed in the map using the hash of their symbolic virtual address, therefore querying using an address that is equal but structurally different will fail to find the cell. This memory state does not resolve aliasing. For instance, storing a value at virtual address esp + 24 and then querying ebp + 8 will always assume that they are two non-aliasing addresses unless ROSE is able to simplify one of the expressions to exactly match the other.

Although this state has less precision than the list-based state (MemoryListState), it operatates in logorithmic time instead of linear time, and by using hashing it avoids a relatively expensive comparison of address expressions at each step.

This class should not be confused with MemoryMap. The former is used by instruction semantics to represent the state of memory such as during data-flow, while the latter is a model for mapping concrete values to concrete addresses similar to how operating systems map parts of files into an address space.