【发布时间】:2016-11-28 05:05:55
【问题描述】:
在 Ubuntu 32 位机器上,我读出了一个进程的内存映射,这是我编写的一个简单的 C 程序。我注意到为 /malloc/malloc_example 分配了三个内存区域,这是我的二进制文件的路径。几个问题:
1.这三个内存区域的含义是什么? (第二个看起来像栈)
2.同理,/lib/i386-linux-gnu/libc-2.15.so的三个内存区域是什么意思?
3.[vdso]区域的作用是什么?
4. [stack] 区域的用途是什么? (我假设这不是 main 函数的实际堆栈,因为程序堆栈通常从 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]
【问题讨论】:
-
为什么不先read the documentation? (大约五分之一,寻找
/proc/[pid]/maps。)然后,澄清你的问题,什么还不清楚。提示:3)同样,read the documentation on vdso。 4. 你猜错了。