ここでは、2 つの異なる端末で同じプログラムの 2 つのインスタンスを実行しています。それらのプロセスマップは
最初のターミナルで -
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
第2ターミナルでは -
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 に 2 つの異なるアドレス ( 00007f90f279a000 と 00007f3b0b0cb000 ) があります。このライブラリがメイン メモリに 2 回読み込まれるということですか。
a.out が単純な Hello_World.c プログラムのバイナリであると仮定します
#include<stdio.h> void main() { printf("Hello World");}
次に、a.out のどの部分に r & w パーミッションがありますか? 簡単に言えば、ソース「0000000000601000 4K rw--- /home/vikram/a.out」のどの部分がこのセグメントに含まれていると思われますか?
anon が他のセグメントのように連続していないのはなぜですか?
What " 00007f90f2590000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so " このセグメントには .... 読み取り、書き込み、実行権限がないため、含まれているはずです。