if (aMemVal.containsKey(m)) return aMemVal.get(m);
else {
// Check if the memory location references the program's data area or imports
if (m.getAddress() instanceof RTLNumber) {
AbsoluteAddress a = new AbsoluteAddress((RTLNumber)m.getAddress());
ExecutableImage module = Program.getProgram().getModule(a);
if (module == null) return NumberElement.getTop(m.getBitWidth());
// only read memory from image if we havn't overapproximated yet or it's a read only section
if (!dataIsTop || module.isReadOnly(a)) {
try {
RTLNumber mValue = module.readMemoryLocation(m);
// Memory outside the program area is implicitly initialized to top
if (mValue != null)
return new NumberElement(mValue);
} catch (IOException e) {
// Fall through and return TOP