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)}'