c - store memory address in a char* and & in gdb -
i trying create chain of pointer addresses, first pointing address of next, , on.
for example, char *a
's address 0x1
, char *b
address 0x2
, char *x
address 0x3
. want link a
->b
->c
, hope store value 0x2
0x1
memory address, value 0x3
0x2
memory address.
i have following codes:
#define put(p, val) (*(unsigned long *)(p) = (val)) #define set_next_ptr(p, ptr) (*(char**)(p) = (char*)((unsigned long)(ptr))) void chain(char* bp){ char *first = mem_sbrk(size); char *second =mem_sbrk(size); put(first, (unsigned long)bp); put(bp, *second); }
when run gdb, , exam memory address. after call mem_sbrk
first , second.
(gdb) x /x first 0x7ffff661c020: 0x00000000 (gdb) x /x bp 0x7ffff661b020: 0x00000000 (gdb) x/x second 0x7ffff661d020: 0x00000000
after call put
macro:
(gdb) x/x second 0x7ffff661d020: 0x00000000 0x00000000 (gdb) x /2x first 0x7ffff661c020: 0xf661b020 0x00007fff (gdb) p first 0x7ffff661c020 " \260a\366\377\177" (gdb) x /2x bp 0x7ffff661b020: 0xf661d020 0x00007fff
it seems working. wonder how can convert memory address pointer. since entire memory address stores 0x7ffff661d020
, 0x7ffff661d024
. when use p
first, returns meaningless string.
second question, in gdb when call
(gdb) p &bp (char **) 0x7fffffffe3e8
i wonder 0x7fffffffe3e8
? thought &
getting memory address,i expect gdb shows
(void*) 0x7ffff661b020
third question difference between
#define put(p, val) (*(unsigned long *)(p) = (val)) #define set_next_ptr(p, ptr) (*(char**)(p) = (char*)((unsigned long)(ptr)))
Comments
Post a Comment