我使用 mmap 创建了一块 4K 的内存。
kg>./a.out &
[1] 23286
Memory Address : 0xb7f6f000
kg>pmap 23286
23286: ./a.out
0053d000 4K r-x-- [ anon ]
08048000 4K r-x-- /home/trng3/sh/POC/a.out
08049000 4K rwx-- /home/trng3/sh/POC/a.out
46f46000 100K r-x-- /lib/ld-2.5.so
46f5f000 4K r-x-- /lib/ld-2.5.so
46f60000 4K rwx-- /lib/ld-2.5.so
46f68000 1244K r-x-- /lib/libc-2.5.so
4709f000 8K r-x-- /lib/libc-2.5.so
470a1000 4K rwx-- /lib/libc-2.5.so
470a2000 12K rwx-- [ anon ]
b7f57000 4K rw--- [ anon ]
b7f6f000 4K rw-s- /dev/zero (deleted)
b7f70000 4K rw--- [ anon ]
bfd18000 88K rw--- [ stack ]
total 1488K
当我计算大小(btwn b7f6f000 和 b7f70000)时,它是 1000 字节而不是 4K。为什么内存没有被创建为 4K?. 为什么新创建的内存映射到 /dev/zero (deleted) 。是 rw-s- , s 是交换空间。
源代码 :
int main(){
/* Variables */
create_memory();
return SUCCESS;
}
/* Create Memory Region in User Space in RAM */
int create_memory(){
ptr_file_sys = mmap(NULL,4096,PROT_READ | PROT_WRITE,MAP_ANON | MAP_SHARED,-1,0);
if(MAP_FAILED == ptr_file_sys){
error_print("\n Cannot allocate memory space!\n");
}
else{
debug_print("\n Memory Address : 0x%x \n",ptr_file_sys);
}
return SUCCESS;
}
int delete_memory(){
munmap(ptr_file_sys,4096);
}