2012-01-14 95 views
1

當我運行下面的代碼,爲什麼PROC /自/地圖沒有顯示映射正確

int x[4096]; 
int *y; 
int *m; 

void main() 
{ 
    y = (int*)malloc(4096 * sizeof(int)); 
    m = (int*)mmap(0, 4096 * sizeof(int), PROT_READ | PROT_WRITE, 
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); 

    printf("x = %p, y = %p, m = %p\n\n", x, y, m); 

    system("cat /proc/self/maps"); 
} 

我得到以下輸出,

x = 0x601060, y = 0x606010, m = 0x7ffff7ff5000 

00400000-0040b000 r-xp 00000000 08:01 655382        /bin/cat 
0060a000-0060b000 r--p 0000a000 08:01 655382        /bin/cat 
0060b000-0060c000 rw-p 0000b000 08:01 655382        /bin/cat 
0060c000-0062d000 rw-p 00000000 00:00 0         [heap] 
7ffff77b5000-7ffff7a59000 r--p 00000000 08:01 395618      /usr/lib/locale/locale-archive 
7ffff7a59000-7ffff7bd3000 r-xp 00000000 08:01 1062643     /lib/libc-2.12.1.so 
7ffff7bd3000-7ffff7dd2000 ---p 0017a000 08:01 1062643     /lib/libc-2.12.1.so 
7ffff7dd2000-7ffff7dd6000 r--p 00179000 08:01 1062643     /lib/libc-2.12.1.so 
7ffff7dd6000-7ffff7dd7000 rw-p 0017d000 08:01 1062643     /lib/libc-2.12.1.so 
7ffff7dd7000-7ffff7ddc000 rw-p 00000000 00:00 0 
7ffff7ddc000-7ffff7dfc000 r-xp 00000000 08:01 1062651     /lib/ld-2.12.1.so 
7ffff7fd9000-7ffff7fdc000 rw-p 00000000 00:00 0 
7ffff7ff9000-7ffff7ffb000 rw-p 00000000 00:00 0 
7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0       [vdso] 
7ffff7ffc000-7ffff7ffd000 r--p 00020000 08:01 1062651     /lib/ld-2.12.1.so 
7ffff7ffd000-7ffff7ffe000 rw-p 00021000 08:01 1062651     /lib/ld-2.12.1.so 
7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0 
7ffffffde000-7ffffffff000 rw-p 00000000 00:00 0       [stack] 
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0     [vsyscall] 

現在,我的問題是,爲什麼回憶分配爲malloc,mmap或全局數據不在任何映射的範圍內/proc/self/maps

回答

12

當您運行system("cat /proc/self/maps");時,顯示cat進程的映射。你可以在輸出的第一線看到它是一個映射貓可執行文件:

00400000-0040b000 r-xp 00000000 08:01 655382        /bin/cat 

你需要做snprintf(..., "cat /proc/%d/maps", getpid());,或打開在/ proc /自/ pid文件,並在自己的閱讀它的自我處理。

+1

啊,非常好的觀察! – MetallicPriest 2012-01-14 18:38:00