maps文件一般是这个样子:

pi@raspberrypi:~ $ sudo cat /proc//maps
54b88000-54c8d000 r-xp b3: /lib/systemd/systemd
54c9c000-54cac000 r--p b3: /lib/systemd/systemd
54cac000-54cad000 rw-p b3: /lib/systemd/systemd
5628b000- rw-p : [heap]
- rw-p :
-75a00000 ---p :
75b00000-75b29000 rw-p :
75b29000-75c00000 ---p :
75c4c000-75c4d000 ---p :
75c4d000-7644c000 rwxp :
7644c000-7644d000 ---p :
7644d000-76c4c000 rwxp :
76c4c000-76c8e000 rw-p :
76c8e000-76c92000 r-xp b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
76c92000-76ca1000 ---p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
76ca1000-76ca2000 r--p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
76ca2000-76ca3000 rw-p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
76ca3000-76ca5000 r-xp b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
76ca5000-76cb4000 ---p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
76cb4000-76cb5000 r--p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
76cb5000-76cb6000 rw-p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
76cb6000-76d18000 r-xp b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
76d18000-76d27000 ---p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
76d27000-76d28000 r--p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
76d28000-76d29000 rw-p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
76d29000-76d2f000 r-xp b3: /lib/arm-linux-gnueabihf/librt-2.19.so
76d2f000-76d3e000 ---p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
76d3e000-76d3f000 r--p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
76d3f000-76d40000 rw-p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
76d40000-76d53000 r-xp b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
76d53000-76d62000 ---p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
76d62000-76d63000 r--p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
76d63000-76d64000 rw-p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
76d64000-76d67000 r-xp b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
76d67000-76d76000 ---p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
76d76000-76d77000 r--p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
76d77000-76d78000 rw-p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
76d78000-76d90000 r-xp b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
76d90000-76d9f000 ---p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
76d9f000-76da0000 r--p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
76da0000-76da1000 rw-p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
76da1000-76dab000 rw-p :
76dab000-76db6000 r-xp b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
76db6000-76dc5000 ---p 0000b000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
76dc5000-76dc6000 r--p 0000a000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
76dc6000-76dc7000 rw-p 0000b000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
76dc7000-76de2000 r-xp b3: /lib/arm-linux-gnueabihf/libselinux.so.
76de2000-76df1000 ---p 0001b000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
76df1000-76df2000 r--p 0001a000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
76df2000-76df3000 rw-p 0001b000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
76df3000-76df4000 rw-p :
76df4000-76f1f000 r-xp b3: /lib/arm-linux-gnueabihf/libc-2.19.so
76f1f000-76f2f000 ---p 0012b000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
76f2f000-76f31000 r--p 0012b000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
76f31000-76f32000 rw-p 0012d000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
76f32000-76f35000 rw-p :
76f35000-76f49000 r-xp b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
76f49000-76f59000 ---p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
76f59000-76f5a000 r--p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
76f5a000-76f5b000 rw-p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
76f5b000-76f5d000 rw-p :
76f6f000-76f74000 r-xp b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f74000-76f83000 ---p b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f83000-76f84000 rw-p b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
76f84000-76fa4000 r-xp b3: /lib/arm-linux-gnueabihf/ld-2.19.so
76fab000-76fb3000 rw-p :
76fb3000-76fb4000 r--p 0001f000 b3: /lib/arm-linux-gnueabihf/ld-2.19.so
76fb4000-76fb5000 rw-p b3: /lib/arm-linux-gnueabihf/ld-2.19.so
7ef76000-7ef97000 rwxp : [stack]
7eff2000-7eff3000 r-xp : [sigpage]
7eff3000-7eff4000 r--p : [vvar]
7eff4000-7eff5000 r-xp : [vdso]
ffff0000-ffff1000 r-xp : [vectors]
pi@raspberrypi:~ $

只有模块起始和结束地址,但是没有模块的size。有时我们需要size,要怎么来获取?比较容易的方法是写个shell脚本,大致思路是:提取第一列,再从第一列中提取出开始地址和结束地址,再两个相减得到size。

研究了一下awk的man,发现上述的几个步骤awk完全可以包办了:

sudo cat /proc//maps | awk '{split($1,RANGE,"-"); if(RANGE[1]~/^0x/){STARTADDR=strtonum(RANGE[1])} else{STARTADDR=strtonum("0x"RANGE[1])}; if(RANGE[2]~/^0x/){ENDADDR=strtonum(RANGE[2])} else{ENDADDR=strtonum("0x"RANGE[2])};ADDRSIZE=strtonum(ENDADDR-STARTADDR);printf("0x%x 0x%x 0x%x %s\n", STARTADDR, ENDADDR, ADDRSIZE, $0)}'

大致解释一下:

{split($,RANGE,"-")

此句意思是将第一列拆分成数组,结果保存在变量RANGE中,分割符为“-”。即:RANGE[1]为起始地址,RANGE[2]为结束地址

if(RANGE[]~/^0x/){STARTADDR=strtonum(RANGE[])} else{STARTADDR=strtonum("0x"RANGE[])}

对于Linux的有些发行版来说,第一列的地址可能以“0x”开头,而有些则不是(比如本人使用的树莓派Raspbian GNU/Linux),这里兼容了一下这两种情况,结果STARTADDR的值为0x????????

if(RANGE[]~/^0x/){ENDADDR=strtonum(RANGE[])} else{ENDADDR=strtonum("0x"RANGE[])}

同上,这里得到的ENDADDR值也是0x????????的形式

ADDRSIZE=strtonum(ENDADDR-STARTADDR)

这里调用了awk的內建函数strtonum,该函数将一个字符串转换为十进制数字,前面的STARTADDR和ENDADDR之所以要加上“0x”前缀也是因为strtonum的要求:如果是16进制数,则必须有前缀,否则会按照十进制处理,发生错误。注意awk要求引用变量时不需要加$符号。某些较低版本的awk可能会不支持strtonum,此时需要upgrade更新,或者下载gawk的最近代码重新编译:http://mirrors.ustc.edu.cn/gnu/

printf("0x%x 0x%x 0x%x %s\n", STARTADDR, ENDADDR, ADDRSIZE, $)

最后一步是格式化输出,这个跟C语言的printf是很相似的。这里$0表示原文件中一行的所有列。

最后得到的结果是这个样子:

0x54b88000 0x54c8d000 0x105000 54b88000-54c8d000 r-xp  b3:      /lib/systemd/systemd
0x54c9c000 0x54cac000 0x10000 54c9c000-54cac000 r--p b3: /lib/systemd/systemd
0x54cac000 0x54cad000 0x1000 54cac000-54cad000 rw-p b3: /lib/systemd/systemd
0x5628b000 0x56354000 0xc9000 5628b000- rw-p : [heap]
0x75900000 0x75929000 0x29000 - rw-p :
0x75929000 0x75a00000 0xd7000 -75a00000 ---p :
0x75b00000 0x75b29000 0x29000 75b00000-75b29000 rw-p :
0x75b29000 0x75c00000 0xd7000 75b29000-75c00000 ---p :
0x75c4c000 0x75c4d000 0x1000 75c4c000-75c4d000 ---p :
0x75c4d000 0x7644c000 0x7ff000 75c4d000-7644c000 rwxp :
0x7644c000 0x7644d000 0x1000 7644c000-7644d000 ---p :
0x7644d000 0x76c4c000 0x7ff000 7644d000-76c4c000 rwxp :
0x76c4c000 0x76c8e000 0x42000 76c4c000-76c8e000 rw-p :
0x76c8e000 0x76c92000 0x4000 76c8e000-76c92000 r-xp b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
0x76c92000 0x76ca1000 0xf000 76c92000-76ca1000 ---p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
0x76ca1000 0x76ca2000 0x1000 76ca1000-76ca2000 r--p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
0x76ca2000 0x76ca3000 0x1000 76ca2000-76ca3000 rw-p b3: /lib/arm-linux-gnueabihf/libattr.so.1.1.
0x76ca3000 0x76ca5000 0x2000 76ca3000-76ca5000 r-xp b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
0x76ca5000 0x76cb4000 0xf000 76ca5000-76cb4000 ---p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
0x76cb4000 0x76cb5000 0x1000 76cb4000-76cb5000 r--p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
0x76cb5000 0x76cb6000 0x1000 76cb5000-76cb6000 rw-p b3: /lib/arm-linux-gnueabihf/libdl-2.19.so
0x76cb6000 0x76d18000 0x62000 76cb6000-76d18000 r-xp b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
0x76d18000 0x76d27000 0xf000 76d18000-76d27000 ---p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
0x76d27000 0x76d28000 0x1000 76d27000-76d28000 r--p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
0x76d28000 0x76d29000 0x1000 76d28000-76d29000 rw-p b3: /lib/arm-linux-gnueabihf/libpcre.so.3.13.
0x76d29000 0x76d2f000 0x6000 76d29000-76d2f000 r-xp b3: /lib/arm-linux-gnueabihf/librt-2.19.so
0x76d2f000 0x76d3e000 0xf000 76d2f000-76d3e000 ---p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
0x76d3e000 0x76d3f000 0x1000 76d3e000-76d3f000 r--p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
0x76d3f000 0x76d40000 0x1000 76d3f000-76d40000 rw-p b3: /lib/arm-linux-gnueabihf/librt-2.19.so
0x76d40000 0x76d53000 0x13000 76d40000-76d53000 r-xp b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
0x76d53000 0x76d62000 0xf000 76d53000-76d62000 ---p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
0x76d62000 0x76d63000 0x1000 76d62000-76d63000 r--p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
0x76d63000 0x76d64000 0x1000 76d63000-76d64000 rw-p b3: /lib/arm-linux-gnueabihf/libkmod.so.2.2.
0x76d64000 0x76d67000 0x3000 76d64000-76d67000 r-xp b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
0x76d67000 0x76d76000 0xf000 76d67000-76d76000 ---p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
0x76d76000 0x76d77000 0x1000 76d76000-76d77000 r--p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
0x76d77000 0x76d78000 0x1000 76d77000-76d78000 rw-p b3: /lib/arm-linux-gnueabihf/libcap.so.2.24
0x76d78000 0x76d90000 0x18000 76d78000-76d90000 r-xp b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
0x76d90000 0x76d9f000 0xf000 76d90000-76d9f000 ---p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
0x76d9f000 0x76da0000 0x1000 76d9f000-76da0000 r--p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
0x76da0000 0x76da1000 0x1000 76da0000-76da1000 rw-p b3: /lib/arm-linux-gnueabihf/libaudit.so.1.0.
0x76da1000 0x76dab000 0xa000 76da1000-76dab000 rw-p :
0x76dab000 0x76db6000 0xb000 76dab000-76db6000 r-xp b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
0x76db6000 0x76dc5000 0xf000 76db6000-76dc5000 ---p 0000b000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
0x76dc5000 0x76dc6000 0x1000 76dc5000-76dc6000 r--p 0000a000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
0x76dc6000 0x76dc7000 0x1000 76dc6000-76dc7000 rw-p 0000b000 b3: /lib/arm-linux-gnueabihf/libpam.so.0.83.
0x76dc7000 0x76de2000 0x1b000 76dc7000-76de2000 r-xp b3: /lib/arm-linux-gnueabihf/libselinux.so.
0x76de2000 0x76df1000 0xf000 76de2000-76df1000 ---p 0001b000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
0x76df1000 0x76df2000 0x1000 76df1000-76df2000 r--p 0001a000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
0x76df2000 0x76df3000 0x1000 76df2000-76df3000 rw-p 0001b000 b3: /lib/arm-linux-gnueabihf/libselinux.so.
0x76df3000 0x76df4000 0x1000 76df3000-76df4000 rw-p :
0x76df4000 0x76f1f000 0x12b000 76df4000-76f1f000 r-xp b3: /lib/arm-linux-gnueabihf/libc-2.19.so
0x76f1f000 0x76f2f000 0x10000 76f1f000-76f2f000 ---p 0012b000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
0x76f2f000 0x76f31000 0x2000 76f2f000-76f31000 r--p 0012b000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
0x76f31000 0x76f32000 0x1000 76f31000-76f32000 rw-p 0012d000 b3: /lib/arm-linux-gnueabihf/libc-2.19.so
0x76f32000 0x76f35000 0x3000 76f32000-76f35000 rw-p :
0x76f35000 0x76f49000 0x14000 76f35000-76f49000 r-xp b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
0x76f49000 0x76f59000 0x10000 76f49000-76f59000 ---p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
0x76f59000 0x76f5a000 0x1000 76f59000-76f5a000 r--p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
0x76f5a000 0x76f5b000 0x1000 76f5a000-76f5b000 rw-p b3: /lib/arm-linux-gnueabihf/libpthread-2.19.so
0x76f5b000 0x76f5d000 0x2000 76f5b000-76f5d000 rw-p :
0x76f6f000 0x76f74000 0x5000 76f6f000-76f74000 r-xp b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
0x76f74000 0x76f83000 0xf000 76f74000-76f83000 ---p b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
0x76f83000 0x76f84000 0x1000 76f83000-76f84000 rw-p b3: /usr/lib/arm-linux-gnueabihf/libarmmem.so
0x76f84000 0x76fa4000 0x20000 76f84000-76fa4000 r-xp b3: /lib/arm-linux-gnueabihf/ld-2.19.so
0x76fab000 0x76fb3000 0x8000 76fab000-76fb3000 rw-p :
0x76fb3000 0x76fb4000 0x1000 76fb3000-76fb4000 r--p 0001f000 b3: /lib/arm-linux-gnueabihf/ld-2.19.so
0x76fb4000 0x76fb5000 0x1000 76fb4000-76fb5000 rw-p b3: /lib/arm-linux-gnueabihf/ld-2.19.so
0x7ef76000 0x7ef97000 0x21000 7ef76000-7ef97000 rwxp : [stack]
0x7eff2000 0x7eff3000 0x1000 7eff2000-7eff3000 r-xp : [sigpage]
0x7eff3000 0x7eff4000 0x1000 7eff3000-7eff4000 r--p : [vvar]
0x7eff4000 0x7eff5000 0x1000 7eff4000-7eff5000 r-xp : [vdso]
0xffff0000 0xffff1000 0x1000 ffff0000-ffff1000 r-xp : [vectors]

awk 解析maps文件中的地址的更多相关文章

  1. iOS如何解析crash文件中的地址

    1.目录中存放app文件 2.打开文件 3.执行命令otool -arch arm64 -l ./QQStock  | grep -B 1 -A 10 "LC_SEGM" | gr ...

  2. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  3. [Python]根据地址从maps文件中找相应的库名

    /proc/PID/maps提供了进程的memory layout,下面脚本根据给定地址找出相应的库名: #!/usr/bin/python from __future__ import print_ ...

  4. sort +awk+uniq 统计文件中出现次数最多的前10个单词

    实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...

  5. python解析pcap文件中的http数据包

    使用scapy.scapy_http就可以方便的对pcap包中的http数据包进行解析 scapy_http可以在https://github.com/invernizzi/scapy-http下载, ...

  6. YML文件中ipv6地址输入格式

    关于YML文件格式可以百度,这里只说ipv6:yml文件是注重格式的不能用tab键代替空格 ipv4 :10.1.202.9 ipv6: 2001:202::6e4:f32b:c19c:4760 端口 ...

  7. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  8. php解析mpp文件中的资源

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL: 1.读取mpp文件 $file_path = " ...

  9. php解析mpp文件中的前置任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

随机推荐

  1. UI设计的重要性--避免二义性的输入提示

    昨天晚上发现了西安公路客运网上售票系统网站的密码找回系统存在安全漏洞,得出的结论是:密码找回页的漏洞:   1.用户名栏支持用户名.身份证.电话三种任意一种匹配.2.这一步是关键,密码找回问题提示栏居 ...

  2. javascript中的变量、执行环境、作用域

  3. MySQL加载并执行SQL脚本文件

    第一种方法: 命令行下(未连接数据库) ,输入 mysql -h localhost -u root -p123456 < C:\db.sql 第二种方法: 命令行下(已连接数据库,此时的提示符 ...

  4. SqlServer统计最近一周的数据

    select * from 表名 where  DATEDIFF( day, 日期字段列名,getdate())<7 and DATEPART(w,  日期字段列名) <DATEPART( ...

  5. svn: E200030: sqlite[S10]: disk I/O error

    1. 经遇到的问题,它出现(在我的情况下,至少)要与TortoiseSVN的相互作用.禁用TortoiseSVN的图标缓存(设置>图标重载>缓存“无”>申请)拥有的一切工作就好了 ( ...

  6. item30,最小的k个数

    剑指offer给出两类方法: 1,借助快排的思想,需要修改输入数组的元素,时间复杂度O(n) 2,借助STL中set或者multiset,因为它们的底层数据结构是红黑树实现的,插入数据时间复杂度为O( ...

  7. 2. hdfs

    一.Hdfs的shell 所有hadoop的fs的shell均用uri路径作为参数 uri格式:schema://authority/path.hdfs的schema是hdfs.其中,schema和a ...

  8. git 使用详解(8)-- tag打标签

    打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列出所有可用的标签,如何新建标签,以 ...

  9. VMWare虚拟机下RedHat 9.0linux的网络设置

    VMWare虚拟机下安装的RedHat 9.0 linux有三种方式实现上网,桥接.nat.host-only.本来想用桥接方式的,可总是因为配置网络出现问题而不能上网,还把 sygate4.5(代理 ...

  10. TextView的属性列表

    网上收集和自己整理的TextView控件中可选择的属性列表,经常可以用到的: android:autoLink       设置是否当 文本为URL链接/email/电话号码/map时,文本显示为可点 ...