-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_function_padding.sh
executable file
·77 lines (70 loc) · 1.96 KB
/
check_function_padding.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
. global_exports.sh
num_nop=0
function get_num_nops {
local num=0
NOPS=$(awk '/'"$1"'/{flag=1; nr=0; getline;} flag&&nr<10{print $3;nr++} nr>10{exit}' $QEMU_DIR/$KERNEL_VMLINUX_DUMP)
for NOP in $NOPS; do
if [ $NOP == 'nop' ]; then
let num=num+1
else
break
fi
done
let num_nop=num
}
#CALLS=$(cat ${QEMU_DIR}/${KERNEL_VMLINUX_DUMP}| grep call)
CALLS=$(cat ${QEMU_DIR}/call_stats.dump)
i=0
after_call=2
for CALL in $CALLS; do
case $CALL in
*: )
CALL_MATCH_TOKEN[$i]=$CALL
CALL_SIZE[$i]=0
after_call=0
;;
*call* )
after_call=1
;;
* )
if (( $after_call == 0 )); then
let CALL_SIZE[$i]=CALL_SIZE[$i]+1
elif(( $after_call == 1 )); then
CALL_FORMAT[$i]=$CALL
let i=i+1
after_call=2
fi
;;
esac
done
echo "Functions and their call size" > call.table
for(( c=0; c<$i ; c++ ))
do
num_nop=0
get_num_nops ${CALL_MATCH_TOKEN[$c]}
# if (( 8 == $num_nop + ${CALL_SIZE[$c]} )); then
# if [ $1 == 'print_all' ]; then
# echo -n ${CALL_MATCH_TOKEN[$c]} >> call.table
# echo -n " " >> call.table
# echo -n ${CALL_FORMAT[$c]} >> call.table
# echo -n " " >> call.table
# echo -n ${CALL_SIZE[$c]} >> call.table
# echo -n " " >> call.table
# echo -n ${num_nop} >> call.table
# echo -n " " >> call.table
# echo "SUCCESS" >> call.table
# fi
# else
if (( 8 != $num_nop + ${CALL_SIZE[$c]} )); then
echo -n ${CALL_MATCH_TOKEN[$c]} >> call.table
echo -n " " >> call.table
echo -n ${CALL_FORMAT[$c]} >> call.table
echo -n " " >> call.table
echo -n ${CALL_SIZE[$c]} >> call.table
echo -n " " >> call.table
echo -n ${num_nop} >> call.table
echo -n " " >> call.table
echo "FAILED" >> call.table
fi
done