透过程序了解命令pmap内mapping的含义

这几天在了解进程各个段的所占内存大小的时候,碰到pmap这个命令,但是从网上查了一下,还是不明白mapping那一列annon 等都代表什么含义.

于是通过特定的程序来看看他们所代表的含义,主要原理就是根据变量所在段的不同,来通过变量知道段的类别.

比如,为了看一下代码段是哪一个?我就多些大量的代码,几乎不声明变量.然后根据所占内存空间的大小窥探所属的段类别,

找heap在哪,就malloc一大块内存,找stack,就在函数里多声明局部变量等等.

以下是部分实验结果:

代码:

int kross[1024*1024];
int kross_2[2*1024*1024]={0,1,2,3};
int main(){
 int* b;
 int a;
 int statck[256*1024]={0,1,2,3,4,5};
 b = (int*)malloc(sizeof(int)*512*1024);
 scanf("%d",&a);
 return 0;

}


如图,根据我们声明变量的大小,我们就可以基本推测出各个段对应的位置.

比如,stack 就是stack

 heap应该就在anon里面

而全局变量区则在第三行 ------test里面


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pmap命令在Linux/Unix系统中是一个系统级工具,用于显示进程的内存映像信息。pmap -x选项可以显示更详细的信息,而pmap -X选项则可以显示更加详细的信息。下面是两个选项的实现方式: 1. pmap -x pmap -x命令会显示进程的内存映像信息,包括虚拟内存地址、物理内存地址、权限、偏移量和映像文件名等。以下是pmap -x选项的实现代码: ```bash #!/bin/bash if [ $# -eq 0 ]; then echo "Usage: pmap -x <PID>" exit 1 fi pid=$1 if [ ! -d "/proc/$pid" ]; then echo "PID $pid not found." exit 1 fi echo "Address Kbytes RSS Dirty Mode Mapping" grep rw-p /proc/$pid/maps | awk '{print $1,$2,$3,$4,$5,$6,$7}' | while read addr kbytes rss dirty mode mapping; do file=$(echo $mapping | awk -F" " '{print $NF}') printf "%-17s %-9s %-7s %-6s %-8s %s\n" $addr $kbytes $rss $dirty $mode $file done ``` 脚本首先会检查是否提供了进程ID,然后会检查进程是否存在。接下来,它会在/proc/$pid/maps文件中查找包含rw-p权限信息的行,并提取有关虚拟地址、物理地址、权限、偏移量和映像文件名的信息。最后,它会使用awk将这些信息格式化输出。 2. pmap -X pmap -X命令会显示更加详细的信息,包括每个虚拟内存地址的映射详细信息。以下是pmap -X选项的实现代码: ```bash #!/bin/bash if [ $# -eq 0 ]; then echo "Usage: pmap -X <PID>" exit 1 fi pid=$1 if [ ! -d "/proc/$pid" ]; then echo "PID $pid not found." exit 1 fi echo "Address Kbytes RSS Dirty Mode Mapping" grep rw-p /proc/$pid/maps | awk '{print $1}' | while read addr; do echo "Address: $addr" cat /proc/$pid/smaps | awk -v a="$addr" '$1==a {print $0}' | sed 's/^/ /' done ``` 该脚本首先会检查是否提供了进程ID,然后会检查进程是否存在。接下来,它会在/proc/$pid/maps文件中查找包含rw-p权限信息的行,并提取有关虚拟地址的信息。然后,它会查找/proc/$pid/smaps文件中与每个虚拟地址对应的行,并在每个地址下打印详细信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值