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 = & ...
随机推荐
- 关于iis站点无法读取 服务器共享目录的问题
也是权限问题,具体解决方法如下: 1. 找到该站点所在的应用程序池>>高级设置>>进程模型>>设置标志账号,如下图所示 2. 设置账号之后,找到该共享目录>& ...
- 【1-5】jQuery对象和DOM对象
1 jQuery对象转化为DOM对象: var $cr = $("#cr");//获得jQuery对象 var cr = $cr[0];//转化为DOM对象 或者:var cr = ...
- Windows 7无线网卡启用wifi共享蓝屏!
我的笔记本是联想Y460P,装的是Windows 7 Ultiame(x64)系统,通过设置笔记本的无线(Intel WiFi Link 1000 BGN)搭建Wifi环境并共享,使手机能够通过笔记本 ...
- NOR Flash擦写和原理分析 (二)
Nor Flash上电后处于数据读取状态(Reading Array Data).此状态可以进行正常的读.这和读取SDRAM/SRAM/ROM一样.(要是不一样的话,芯片上电后如何从NorFlash中 ...
- makefile中的shell语法
在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是 ...
- 返回顶部(解决IE6固定定位)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 黄聪:C#超级延时方法,延迟系统时间但系统又能同时能执行其它任务
private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务: { DateTime current = DateTime.Now; whil ...
- 为什么引用不了App_Code里的类
在Web应用程序中不能通过右键项目-〉”添加“-〉”添加ASP.NET文件夹“方式添加 .因为Web应用程序中App_Code就不存在 .不过可以通过手动的方式创建,添加一个文件夹命名为App_Cod ...
- 别去研究C++
转载 YH,今天早晨起来.回想昨天,虽然吐槽了 C++ 的各种问题,但给别人打工,还是要靠 C++ 干活吃饭.我对待 C++ 的态度和云风不同,虽然他所说的 C++ 技术的事情我都懂都理解,而我感受到 ...
- ylbtech-LanguageSamples-Struct(结构)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Struct(结构) 1.A,示例(Sample) 返回顶部 “结构”示例 本示例演示结 ...