您的位置:首页 > 运维架构 > Shell

Shell脚本------解析elf文件及awk基本使用

2013-12-05 22:43 525 查看
1.读elf文件

arm-eabi-nm *.elf



2.awk字符判断 及 if语句

运算符描述
赋值运算符
= += -= *= /= %= ^= **=赋值语句
逻辑运算符
||逻辑或
&&逻辑与
正则运算符
~ ~!匹配正则表达式和不匹配正则表达式
关系运算符
< <= > >= != ==关系运算符
算术运算符
+ -加,减
* / &乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
其它运算符
$字段引用
空格字符串连接符
?:C条件表达式
in数组中是否存在某键值
awk -F " " '
{
if(""$2""~/T/)
printf("%x, %s, %s\n", ""$1"", ""$2"", ""$3"");
}

'




3.awk打印16补齐空位

#!bin/sh
arm-eabi-nm 1.test.axf |

awk -F " " '
{
if(""$2""~/T/)
printf("0x%08x, %s, %s\n", ""$1"", ""$2"", ""$3"");
}

'




4.awk实现16进制加法

#!bin/sh
arm-eabi-nm 1.test.axf |

awk -F " " '
{
if(""$2""~/T/)
printf("%d, %s, %s\n", ""$1+1"", ""$2"", ""$3"");
else
printf("%d, %s, %s\n", ""$1"", ""$2"", ""$3"");
}

'




5.awk 计数

#!bin/sh
arm-eabi-nm 1.test.axf |

awk -F " " '
{
if(""$2""~/T/)
printf("%d %s %s\n", ""$1+1"", ""$2"", ""$3"");
else
printf("%d %s %s\n", ""$1"", ""$2"", ""$3"");
}

'|

awk -F " " '
BEGIN{i=0;}
{
i++;
printf("{0x%08x, %s},\n", ""$1"", ""$3"");
}
END{printf("i=%d\n",i)}

'






补充:

%d 十进制有符号整数

%u 十进制无符号整数

%f 浮点数

%s 字符串

%c 单个字符

%p 指针的值

%e 指数形式的浮点数

%x, %X 无符号以十六进制表示的整数

%0 无符号以八进制表示的整数

%g 自动选择合适的表示法

\n 换行

\f 清屏并换页

\r 回车

\t Tab符

\xhh 表示一个ASCII码用16进表示,其中hh是1到2个16进制数

awk 的链接指向不同,可能需要:

echo a36b | gawk ' { printf "input is :%s\n",strtonum("0x" $0)}'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: