awk 解析maps文件中的地址
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文件中的地址的更多相关文章
- iOS如何解析crash文件中的地址
1.目录中存放app文件 2.打开文件 3.执行命令otool -arch arm64 -l ./QQStock | grep -B 1 -A 10 "LC_SEGM" | gr ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- [Python]根据地址从maps文件中找相应的库名
/proc/PID/maps提供了进程的memory layout,下面脚本根据给定地址找出相应的库名: #!/usr/bin/python from __future__ import print_ ...
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...
- python解析pcap文件中的http数据包
使用scapy.scapy_http就可以方便的对pcap包中的http数据包进行解析 scapy_http可以在https://github.com/invernizzi/scapy-http下载, ...
- YML文件中ipv6地址输入格式
关于YML文件格式可以百度,这里只说ipv6:yml文件是注重格式的不能用tab键代替空格 ipv4 :10.1.202.9 ipv6: 2001:202::6e4:f32b:c19c:4760 端口 ...
- php解析mpp文件中的多级任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...
- php解析mpp文件中的资源
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL: 1.读取mpp文件 $file_path = " ...
- php解析mpp文件中的前置任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...
随机推荐
- Servlet Filter 3
11.MD5加密 /** * 使用md5的算法进行加密 */ public static String md5(String plainText) { byte[] secretBytes = nul ...
- IntelliJ IDEA配置svn
Settings→Version Control→General 输入svn客户端命令所在的路径 来自为知笔记(Wiz)
- bzoj2467: [中山市选2010]生成树
Description 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角 ...
- android学习笔记47——读写SD卡上的文件
读写SD卡上的文件 通过Context的openFileInput.openFileOutput来打开文件输入流.输出流时,程序打开的都是应用程序的数据文件夹里的文件,其存储的文件大小可能都比较有限- ...
- 浅析:setsockopt()改善socket网络程序的健壮性
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BO ...
- java中用中国网建提供的SMS短信平台发送短信
接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下.大体上说的都是有三种方法,分别是sina提供的webservice接口.短信mao和中国网建提供的SMS短信平台. 这三种方 ...
- SQL Server 2012 数据库备份
既能备份到网络中的共享文件夹中,也能备份到本地 USE [AdventureWorks2012] GO /****** Object: StoredProcedure [dbo].[pr_BatchB ...
- 我的Android最佳实践之—— Android启动画面的实现方法
本文实例讲述了Android启动画面的实现方法.分享给大家供大家参考.具体分析如下: 在应用程序中经常用到启动画面,会启动一个后台线程为主程序的运行准备资源.Android要实现启动画面可以这样做: ...
- 黄聪:阿里云Windows2012服务器IIS8实现wordpress完美伪静态(ISAPIRewritev)
1.下载64位URL重写组件:http://www.iis.net/downloads/microsoft/url-rewrite (可以直接下载:urlrewrite2.rar) 2.暂停IIS ...
- solr基于tomcat增加主界面登录权限
tomcat-user.xml增加下面标签(用户名,密码,角色)<user username="admin" password="new-password" ...