I have a 32-bit ARM Linux kernel module with debug symbols. When it is decompiled, it produces many functions that have a macro called MEMORY in them. Here is an example:

int S_u8init_flag = 0; // Context for function internals
int aess_adcsensor_release(inode *inode, file *filp) {
  int result;

  result = 0;
  MEMORY[0xF0014000] &= 0xFFFDFFFF; // What does this mean?
  S_u8init_flag = 0;
  return result;

What does this MEMORY macro mean? Is there a C99 equivalent to it, or is it an IDA-specific macro?

1 Answer 1


MEMORY[<addr>] means there is a direct access to a memory address which is not mapped to an existing segment in the IDB so the decompiler/IDA could not allocate a variable for it.

If you press Tab, you should land on the assembly corresponding to that line and check what is happening there.

  • Thank you! This is perfect. I assume that you would just assign it to a variable to allow comparisons like the one in the code sample, right?
    – nhubbard
    Commented May 14, 2019 at 18:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.