shell 脚本实现arm指令比对功能

1、参考https://unix.stackexchange.com/questions/81916/how-to-find-a-space-in-a-text-using-grep找到objdum有效代码行

2、完整的脚本如下(下一步改造未python方式实现)

#!/bin/bash

# the objdump format of arm similar as
# 0000000000fa19d0 <forms_>:
#   fa19d0:	d0133c81 	adrp	x1, 27733000 <fmcom_+0x26259af0>
#   fa19d4:	a9ba7bfd 	stp	x29, x30, [sp, #-96]!

if [ $# -ne 2 ]; then
	echo `basename $0`: too few arguments
	echo Usage: `basename $0` objdump1 objdump2
	exit 1
fi

FILE1OUT="$(mktemp).out1"
FILE2OUT="$(mktemp).out2"
FILE1SUM=0
FILE2SUM=0

echo "#1 = $1"
echo "#2 = $2"
grep  "^[[:space:]]\+[0-9a-zA-Z]\+:" $1 | awk '{print $3}' | sort -f | uniq -c > $FILE1OUT
grep  "^[[:space:]]\+[0-9a-zA-Z]\+:" $2 | awk '{print $3}' | sort -f | uniq -c > $FILE2OUT

printf "||= %32s =||= %6d =||= %6d =||=  Diff  =||\n" "Insn" 1 2
(cat $FILE1OUT $FILE2OUT | awk '{print $2}' | sort -f | uniq -i) > sort.tmpfile
while read i; do
    printf "|| %34s || " $i
	FILE1CNT="$(grep -i " $i$" $FILE1OUT | awk '{print $1}')"
	if [ -z "$FILE1CNT" ]; then
		FILE1CNT="0"
	fi
	FILE1SUM="$(($FILE1SUM+$FILE1CNT))"
	FILE2CNT="$(grep -i " $i$" $FILE2OUT | awk '{print $1}')"
	if [ -z "$FILE2CNT" ]; then
		FILE2CNT="0"
	fi
	FILE2SUM="$(($FILE2SUM+$FILE2CNT))"
    printf "%8d || %8d ||" $FILE1CNT $FILE2CNT
    if [ $(($FILE1CNT-$FILE2CNT)) -gt 0 ]; then
        printf " \e[1;32m%8d\e[0m ||\n" $(($FILE1CNT-$FILE2CNT))
    elif [ $(($FILE1CNT-$FILE2CNT)) -lt 0 ]; then
        printf " \e[1;31m%8d\e[0m ||\n" $(($FILE1CNT-$FILE2CNT))
    else
        echo "          ||"
    fi
done < sort.tmpfile
printf "||              **Total**             || %8d || %8d ||" $FILE1SUM $FILE2SUM
    if [ $(($FILE1SUM-$FILE2SUM)) -gt 0 ]; then
        printf " \e[1;32m%8d\e[0m ||\n" $(($FILE1SUM-$FILE2SUM))
    elif [ $(($FILE1SUM-$FILE2SUM)) -lt 0 ]; then
        printf " \e[1;31m%8d\e[0m ||\n" $(($FILE1SUM-$FILE2SUM))
    else
        echo "          ||"
    fi
rm sort.tmpfile
exit 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值