linux 内存文件proc,简单解读linux的/proc下的statm、maps、memmap 内存信息文件分析

几乎看什么内核漏洞分析之类的文章,第一眼都是被 cat /proc/{pid}/maps

产生的一堆奇怪的信息唬住了,都不敢往下看

居然没有搜到关于它们的详细介绍,旁边也没有表头什么的解释信息

那就我来整理一下吧,方便后人

ls /proc 能看到一些数字命名的文件夹,这个就不多说了,什么pid、fd的知识还是容易弄到的

拿init开刀,

[root@localhost proc]# cat /proc/1/statm

487 185 133 31 0 67 0

很简单地返回7组数字,每一个的单位都是一页 (常见的是4KB)

分别是

size:任务虚拟地址空间大小

Resident:正在使用的物理内存大小

Shared:共享页数

Trs:程序所拥有的可执行虚拟内存大小

Lrs:被映像倒任务的虚拟内存空间的库的大小

Drs:程序数据段和用户态的栈的大小

dt:脏页数量

接下来看看maps

[root@localhost proc]# cat /proc/1/maps

00110000-00111000 r-xp 00110000 00:00 0          [vdso]

0032b000-00347000 r-xp 00000000 fd:00 852733     /lib/ld-2.8.so

00347000-00348000 r--p 0001c000 fd:00 852733     /lib/ld-2.8.so

00348000-00349000 rw-p 0001d000 fd:00 852733     /lib/ld-2.8.so

0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so

004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so

004b1000-004b4000 rw-p 004b1000 00:00 0

08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init

08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init

08b42000-08b6a000 rw-p 08b42000 00:00 0          [heap]

b8046000-b8048000 rw-p b8046000 00:00 0

bfb4e000-bfb63000 rw-p bffeb000 00:00 0          [stack]

一共有6列

第一列代表内存段的虚拟地址

第二列代表执行权限,r,w,x不必说,p=私有 s=共享

不用说,heap和stack段不应该有x,否则就容易被xx,不过这个跟具体的版本有关

第三列代表在进程地址里的偏移量

第四列映射文件的主设备号和次设备号

通过 cat /proc/devices

得知fd是253 device-mapper

第五列映像文件的节点号,即inode

第六列是映像文件的路径

以前我很奇怪怎么会有两个相同的文件路径,原来

08048000-08067000 r-xp 00000000 fd:00 843075     /sbin/init

08067000-08068000 rw-p 0001e000 fd:00 843075     /sbin/init

一个是只读的,是代码段,一个是读写的,是数据段

至于为什么共享库分成了三个

0034b000-004ae000 r-xp 00000000 fd:00 852734     /lib/libc-2.8.so

004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

004b0000-004b1000 rw-p 00165000 fd:00 852734     /lib/libc-2.8.so

其中的004ae000-004b0000 r--p 00163000 fd:00 852734     /lib/libc-2.8.so

还是不能理解

最后看看神秘的memmap

可惜不是所有的版本都有这个文件,如同我这里的情况

只有口头说一说了,memmap需要和maps配合看

显示出来的每一行代表maps里的一个段

每一行的每一个数字,代表那个段里的一个页,段有多大,一行就有对应的多少个数字

如果这个数字是0,代表系统为其分配了虚拟内存,但是没有分配物理内存

如果有数字,则代表系统为其分配了物理内存,以及有多少个进程引用了这个页

当然,不会有负数出现

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值