`

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

阅读更多

转载自:http://hi.baidu.com/deep_pro/blog/item/5a9d5b9487b23314d31b7079.html

 

简单解读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,代表系统为其分配了虚拟内存,但是没有分配物理内存
如果有数字,则代表系统为其分配了物理内存,以及有多少个进程引用了这个页
当然,不会有负数出现

分享到:
评论

相关推荐

    通过Linux系统的内核观察/proc/pid/statm

    在 Linux 系统中,proc_pid_statm 函数是通过 proc 文件系统来实现的,该文件系统提供了一个接口,允许用户空间程序访问内核空间的信息。proc_pid_statm 函数正是通过这个接口来获取任务虚拟地址空间的大小和应用...

    linux /proc 文件 系统监控器 GTK

    在Linux操作系统中,/proc文件系统是一个非常特殊的虚拟文件系统,它并不占用磁盘空间,而是作为内核与用户空间之间的一个接口,用于提供运行时的系统信息。这个特殊的文件系统允许用户通过读取其中的文件来获取关于...

    linux 操作系统 GTK /proc文件 系统监视器

    在Linux下,可以通过读取`/proc`目录下的文件来获取系统信息。例如,`/proc/cpuinfo`包含CPU的详细信息,`/proc/meminfo`展示了系统的内存使用情况,而`/proc/loadavg`则可以获取系统负载平均值。这些文本文件的内容...

    读取/proc/cmdline 文件中的标志位信息

    ### 读取/proc/cmdline 文件中的标志位信息 #### 概述 在Linux系统中,`/proc/cmdline` 文件记录了系统启动时传递给内核的命令行参数。这些参数对于理解系统的启动配置至关重要,并且对于进行系统调试、故障排查...

    /proc 文件分析

    /proc 文件系统中的每个文件或目录都对应着系统中的某个方面,例如 CPU 信息、内存信息、进程信息等。 二、实验要求 在本实验中,我们将使用 GTK 图形库来读取 /proc 文件系统,并将系统状态以图形化的形式显示...

    全面了解Linux下Proc文件系统.

    Linux下的Proc文件系统是Linux内核提供的一种特殊文件系统,它并不存储在硬盘上,而是一种内存映射的虚拟文件系统,主要用于提供内核状态和进程信息。Proc被挂载在根目录`/proc`下,它使得用户可以通过读取和写入...

    读取/proc/cpuinfo获取CPU信息demo

    在Linux操作系统中,`/proc/cpuinfo`是一个虚拟文件,它提供了系统CPU的详细信息。这个文件并不存储在硬盘上,而是由内核动态生成,每次读取时都会反映出当前系统的实时状态。通过读取`/proc/cpuinfo`,我们可以获取...

    Linux中proc目录下文件详解

    在Linux操作系统中,`/proc`目录是一个非常特殊且至关重要的目录,它并不像其他常规目录那样存储实际的文件数据,而是作为一个虚拟文件系统存在,用于提供系统运行时的内核状态信息。这个目录下的文件和子目录是系统...

    使用 /proc 文件系统来访问 Linux 内核的内容.rar

    /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux® 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件...

    AppTrafficAnalyzer,一个应用程序,可以通过读取/proc/net/xt_qtaguid/stats来分析应用程序的流量.zip

    在Linux系统中,`/proc`是一个虚拟文件系统,它提供了访问内核数据结构的接口。`xt_qtaguid`是iptables的一个模块,用于实现流量控制和标记,它将网络流与特定的用户ID和组ID关联起来。`stats`文件则记录了这些标记...

    Qt实现的基于/proc的Linux资源管理器

    基于Ubuntu下/proc虚拟文件系统实现的类似Windows的资源管理器,文章介绍:https://blog.csdn.net/z18223345669/article/details/122377005;内含项目文件和设计报告

    linux proc 文件系统 编程手册

    Linux的`/proc`文件系统是操作系统内核与用户空间之间的一个重要接口,它提供了一种方式来查看和控制运行中的内核状态。这个编程手册是针对初学者的,将帮助你理解如何利用`/proc`来获取系统信息、监控性能以及进行...

    proc_maps_parser:一个轻量级的库,用于解析Linux的proc [pid] maps文件,该文件包含进程的内存映射

    一个轻量级的库,用于解析Linux的/ proc / [pid] / maps文件,该文件包含进程的内存映射 / proc / [pid] / maps 包含当前映射的内存区域及其访问权限的文件。 有关内存映射的更多信息,请参见mmap(2)。 #memory...

    proc文件系统简介

    /proc文件系统是Linux操作系统中一个非常关键的组成部分,它为用户空间提供了一个接口,以便于访问和操作内核的状态及进程信息。由于/proc不是一个实际存在于硬盘上的文件系统,而是存在于内存中,因此它被称为虚拟...

    linux驱动开发proc文件初步

    ### Linux驱动开发之Proc文件系统初步 #### 一、收集系统信息 **1.0 Proc文件系统概览** Proc文件系统是一种特殊的文件系统,它存在于Linux内核中,并且为用户空间提供了关于整个系统的实时信息。不同于传统的...

    linux下利用/proc进行进程树的打印

    在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

    linux proc文件系统详解

    Linux的proc文件系统是Linux内核提供的一种特殊文件系统,它并不存储于硬盘上,而是直接映射到内存中,反映了系统的实时状态。这个虚拟文件系统对于系统管理员和开发者来说至关重要,因为它提供了查看和交互内核运行...

    Linux proc目录下子文件或子文件夹的作用

    ### Linux /proc 目录详解及其子文件或子文件夹的作用 #### 一、Linux /proc 目录简介 在Linux系统中,`/proc` 是一个特殊的文件系统,它实际上是一个虚拟的文件系统,其内容全部存在于内存之中,不占用实际的磁盘...

Global site tag (gtag.js) - Google Analytics