gdb can't access memory address error

When I type x/xw 0x208c it gives me back error which says Cannot access memory at address 0x208c

The disassembly for your program says that it does something like this:

puts("some string");
int i;
scanf("%d", &i);  // I don't know what the actual format string is.
                  // You can find out with x/s 0x8048555
if (i == 0x208c) { ... } else { ... }

In other words, the 0x208c is a value (8332) that your program has hard-coded in it, and is not a pointer. Therefore, GDB is entirely correct in telling you that if you interpret 0x208c as a pointer, that pointer does not point to readable memory.

i finally figured out to use print statement instead of x/xw

You appear to not understand the difference between print and examine commands. Consider this example:

int foo = 42;
int *pfoo = &foo;

With above, print pfoo will give you the address of foo, and x pfoo will give you the value stored at that address (i.e. the value of foo).


I found out that it is impossible to examine mmaped memory that does not have PROT_READ flag. This is not the OPs problem, but it was mine, and the error message is the same.

Instead of

mmap(0, size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);

do

mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);

and voila, the memory can be examined.

Tags:

C

Gdb