linux proc maps文件分析

来源:互联网 发布:ktv手机点歌软件 编辑:程序博客网 时间:2024/05/18 01:49

maps文件的每一列概述如下


第一列

表示该内存段的起始地址

第二列

表示该内存段对应的权限

第三列

如果内存段的信息是文件映射,该列为内存段中的信息在文件中的映射页的偏移

第四列

如果内存段的信息是文件映射,该列为文件所在的设备号

若是匿名映射,设备号为00:00

第五列

如果内存段的信息是文件映射,该列为文件的文件索引号

若是匿名隐射,文件索引号为0

第六列

如果是内存段的信息是文件映射,该列为映射的文件名

若是匿名隐射,该列信息可能是映射到的栈[stack]或者其他数据区


文件映射:信息对应到磁盘上的具体的文件上,需要open,或者read 进行文件操作的

匿名隐射:信息对应到内存中的一些堆栈内,如malloc,new,创建出来的变量

更细节可参考此帖:http://bbs.csdn.net/topics/391860037 或自行搜索


举例说明如下

运行一个getchar()程序,通过该进程的id查看该进程运行时对应的内存分布,


    每一行对应的是程序中不同的内存段

    第一行详解:   

     00400000-00401000表示的是该内存段的起始地址和结束地址; 

     r-xp表示的是该内存段是可读(read),可执行(excute),私有(personal);

     00000000表示的是该内存段的信息映射到文件节点1326446对应的文件的偏移页为00000000对应的信息,将该页的信息拷贝到该内存段

     08:04 是设备号,linux 对于每个设备都抽象成设备文件进行管理操作,每一个设备由主设备号(确定是哪一类设备)和次设备号(确定该类下具体一个设备)结合确定,可以通过cat /proc/devices 可以查看到主设备号对应的主设备类型,在我的电脑中 8 对应的设备类型为sd,是硬盘类,所有的设备文件都存放在/dev下,可以进一步的查看该设备号对应的设备,如下图,对应的为sda4,是硬盘的sda4分区


    1326446 为当前可执行文件的文件索引节点号,也就是inode的索引号,可以通过该索引号,找到一个inode对象,通过该对象可以可以找改文件在磁盘上的具体位置

     /home/woder/docum....../HelloWorld-getchar对应的就是映射文件名。

  此例子对应的前三行分别是代码段,只读数据区,读写私有数据区,这里让我疑惑的是第一行和第二行对应的第三列,也就是代码段和只读数据区映射页偏移为什么都是00000000,有可能这两者的信息都在同一个页上吧

     

参考博客:

linux proc maps文件分析: http://blog.csdn.net/lijzheng/article/details/23618365

Linux中各种设备及设备号:

http://blog.csdn.net/jerry_1126/article/details/52012412

原创粉丝点击