On a Ubuntu 32-bit machine, I read out the memory map of a process which is a simple C program I wrote. I notice there are three memory region allocated for /malloc/malloc_example which is the path to my binary. A few questions:
1.What are the meanings of these three memory regions? (The second one looks like stack)
2.Similarly, what are the meanings of the three memory regions for /lib/i386-linux-gnu/libc-2.15.so?
3.What is the purpose of [vdso] region?
4.What is the purpose of [stack] region? (I assume that is not the actual stack of the main function because program stack normally starts at 0x0804xxxx)
$cat /proc/27429/maps
08048000-08049000 r-xp 00000000 08:01 292930 /malloc/malloc_example
08049000-0804a000 r-xp 00000000 08:01 292930 /malloc/malloc_example
0804a000-0804b000 rwxp 00001000 08:01 292930 /malloc/malloc_example
b7e05000-b7e07000 rwxp 00000000 00:00 0
b7e07000-b7faa000 r-xp 00000000 08:01 7311 /lib/i386-linux-gnu/libc-2.15.so
b7faa000-b7fac000 r-xp 001a3000 08:01 7311 /lib/i386-linux-gnu/libc-2.15.so
b7fac000-b7fad000 rwxp 001a5000 08:01 7311 /lib/i386-linux-gnu/libc-2.15.so
b7fad000-b7fb0000 rwxp 00000000 00:00 0
b7fb0000-b7fc7000 r-xp 00000000 08:01 7416 /lib/i386-linux-gnu/libpthread-2.15.so
b7fc7000-b7fc8000 r-xp 00016000 08:01 7416 /lib/i386-linux-gnu/libpthread-2.15.so
b7fc8000-b7fc9000 rwxp 00017000 08:01 7416 /lib/i386-linux-gnu/libpthread-2.15.so
b7fc9000-b7fcb000 rwxp 00000000 00:00 0
b7fd9000-b7fdd000 rwxp 00000000 00:00 0
b7fdd000-b7fde000 r-xp 00000000 00:00 0 [vdso]
b7fde000-b7ffe000 r-xp 00000000 08:01 7612 /lib/i386-linux-gnu/ld-2.15.so
b7ffe000-b7fff000 r-xp 0001f000 08:01 7612 /lib/i386-linux-gnu/ld-2.15.so
b7fff000-b8000000 rwxp 00020000 08:01 7612 /lib/i386-linux-gnu/ld-2.15.so
bffdf000-c0000000 rwxp 00000000 00:00 0 [stack]