这里我在两个不同的终端运行两个相同程序的实例。它们的流程图是
在第一个终端 -
vikram@vikram-Studio-XPS-1645:~$ pmap 6548
6548: ./a.out
0000000000400000 4K r-x-- /home/vikram/a.out
0000000000600000 4K r---- /home/vikram/a.out
0000000000601000 4K rw--- /home/vikram/a.out
00007f90f2406000 1576K r-x-- /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f278f000 16K r---- /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2793000 4K rw--- /lib/x86_64-linux-gnu/libc-2.13.so
00007f90f2794000 24K rw--- [ anon ]
00007f90f279a000 132K r-x-- /lib/x86_64-linux-gnu/ld-2.13.so
00007f90f2992000 12K rw--- [ anon ]
00007f90f29b7000 12K rw--- [ anon ]
00007f90f29ba000 4K r---- /lib/x86_64-linux-gnu/ld-2.13.so
00007f90f29bb000 8K rw--- /lib/x86_64-linux-gnu/ld-2.13.so
00007fffb2333000 132K rw--- [ stack ]
00007fffb23ff000 4K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 3984K
在第二个终端 -
vikram@vikram-Studio-XPS-1645:~$ pmap 6676
6676: ./a.out
0000000000400000 4K r-x-- /home/vikram/a.out
0000000000600000 4K r---- /home/vikram/a.out
0000000000601000 4K rw--- /home/vikram/a.out
00007f3b0ad37000 1576K r-x-- /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0aec1000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c0000 16K r---- /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c4000 4K rw--- /lib/x86_64-linux-gnu/libc-2.13.so
00007f3b0b0c5000 24K rw--- [ anon ]
00007f3b0b0cb000 132K r-x-- /lib/x86_64-linux-gnu/ld-2.13.so
00007f3b0b2c3000 12K rw--- [ anon ]
00007f3b0b2e8000 12K rw--- [ anon ]
00007f3b0b2eb000 4K r---- /lib/x86_64-linux-gnu/ld-2.13.so
00007f3b0b2ec000 8K rw--- /lib/x86_64-linux-gnu/ld-2.13.so
00007fffb1153000 132K rw--- [ stack ]
00007fffb11c7000 4K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
total 3984K
我的问题是 -
“/ lib / x86_64-linux-gnu / ld-2.13.so”此库在终端1和2中有两个不同的地址(00007f90f279a000和00007f3b0b0cb000)。是否意味着该库在主存中加载了2次?
假设a.out是简单的Hello_World.c程序的二进制文件
#include<stdio.h>
void main()
{ printf("Hello World");}
然后a.out的哪一部分有r&amp;许可? 简单来说,哪一部分来源“0000000000601000 4K rw --- /home/vikram/a.out”这个段假设包含?
为什么anon不像其他片段那样连续?
什么“00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so”此段假设包含....因为它没有读,写,执行权限。
答案 0 :(得分:1)
1)动态加载程序或ld是OS启动进程后首先执行的。这些地址是进程的虚拟地址,但最终将映射到相同的物理内存。
2)流程的数据段。 (初始化数据和BSS) 3)它用于各种目的,如堆,mmap和任何sharedmemory等。 4)AFAIK其内部私人数据。