linux proc maps文件分析

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值