为什么proc / ID / maps有多个共享库条目

时间:2014-01-07 10:21:51

标签: linux procfs memory-mapping

我在看嵌入式Linux下的proc / ID / maps, 而且我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样?

40094000-400d9000 r-xp 00000000 b3:09 723        /system/lib/libc.so
400d9000-400da000 ---p 00000000 00:00 0 
400da000-400dc000 r-xp 00045000 b3:09 723        /system/lib/libc.so
400dc000-400de000 rwxp 00047000 b3:09 723        /system/lib/libc.so
400de000-400e9000 rwxp 00000000 00:00 0 
400e9000-400ed000 r-xp 00000000 b3:09 770        /system/lib/libgccdemangle.so
400ed000-400ee000 ---p 00000000 00:00 0 
400ee000-400ef000 r-xp 00004000 b3:09 770        /system/lib/libgccdemangle.so
400ef000-400f0000 rwxp 00005000 b3:09 770        /system/lib/libgccdemangle.so
40102000-40103000 r-xp 00000000 b3:09 869        /system/lib/libstdc++.so
40103000-40104000 r-xp 00000000 b3:09 869        /system/lib/libstdc++.so
40104000-40105000 rwxp 00001000 b3:09 869        /system/lib/libstdc++.so
40105000-40112000 r-xp 00000000 b3:09 738        /system/lib/libcutils.so
40112000-40113000 r-xp 0000c000 b3:09 738        /system/lib/libcutils.so
40113000-40114000 rwxp 0000d000 b3:09 738        /system/lib/libcutils.so

1 个答案:

答案 0 :(得分:3)

因为ELF共享库像可执行文件一样具有多个段:通常是" text" 只读段(mmap - 共享,因此使用该段的所有进程共享一些物理RAM),以及"数据" 读写段(对于静态或"全局"变量,也可能是PLT ......),对每个进程都是私有的。

Drepper's paper: How to write a shared library

详细解释了这一点