proc/<PID>/maps
查看进程的虚拟地址空间是如何使用的。
该文件有6列,分别为:
地址:库在进程里地址范围
权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;
偏移量:库在进程里地址范围
设备:映像文件的主设备号和次设备号;
节点:映像文件的节点号;
路径: 映像文件的路径
每项都与一个vm_area_struct结构成员对应
C语言代码
#include <stdio.h>
#include <stdlib.h>
int q[200];
int main(void) {
int i, n, *p;
p = (int *) malloc(sizeof(int));
scanf("%d", &n);
for (i=0; i<200; i++)
q[i]=i;
printf("%x %x %x %x %x \n", main, q, p, &i, scanf);
return 0;
}
编译成a.out文件
执行该文件
#./a.out
查看执行该文件对应的进程
#ps au
可以看到2200就是我们需要的pid
#cat /proc/2200/maps