Newer
Older
#!/bin/bash
$PS $1 $2 --backend zipr --step move_globals=on --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option move_globals:--cfi --step-option fix_calls:--fix-all --step-option zipr:"--add-sections false"
$PS $1 $2 --backend zipr --step move_globals=on --step selective_cfi=on --step-option selective_cfi:--multimodule --step-option move_globals:--cfi --step-option fix_calls:--fix-all --step-option selective_cfi:--color --step-option zipr:"--add-sections false"
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
}
get_correct()
{
cp libfoo.so.orig libfoo.so
cp libdude.so.orig libdude.so
./dude.exe > correct
}
test()
{
cp $2 libfoo.so
cp $3 libdude.so
./$1 > out
cmp out correct
if [ $? = 1 ]; then
fails=$(expr $fails + 1 )
echo test failed $1 $2 $3
echo "=== out ==="
cat out
echo "======"
else
passes=$(expr $passes + 1 )
echo test passed.
fi
}
build()
{
gcc -o libfoo.so libfoo.c -w -shared -fPIC
gcc -o libdude.so libdude.c -w -shared -fPIC
gcc -o dude.exe dude.c -w -L. -ldude -lfoo
gcc -o dude.exe.pie dude.c -fPIC -fpie -pie -w -L. -ldude -lfoo
mv libfoo.so libfoo.so.orig
mv libdude.so libdude.so.orig
}
protect()
{
do_cfi ./libfoo.so.orig ./libfoo.so.cfi
do_cfi ./libdude.so.orig ./libdude.so.cfi
do_coloring_cfi ./dude.exe ./dude.exe.cfi.color
do_coloring_cfi ./libfoo.so.orig ./libfoo.so.cfi.color
do_coloring_cfi ./libdude.so.orig ./libdude.so.cfi.color
}
report ()
{
total=$(expr $passes + $fails)
echo "Passes: $passes / $total"
echo "Fails : $fails / $total"
}
main()
{
build
protect
get_correct
test dude.exe libfoo.so.orig libdude.so.orig # unprotected - should pass!
test dude.exe libfoo.so.cfi libdude.so.orig
test dude.exe libfoo.so.cfi.color libdude.so.orig
test dude.exe libfoo.so.orig libdude.so.cfi
test dude.exe libfoo.so.orig libdude.so.cfi.color
test dude.exe libfoo.so.cfi libdude.so.cfi
test dude.exe libfoo.so.cfi libdude.so.cfi.color
test dude.exe libfoo.so.cfi.color libdude.so.cfi
test dude.exe.cfi libfoo.so.orig libdude.so.orig
test dude.exe.cfi libfoo.so.cfi libdude.so.orig
test dude.exe.cfi libfoo.so.cfi.color libdude.so.orig
test dude.exe.cfi libfoo.so.orig libdude.so.cfi
test dude.exe.cfi libfoo.so.orig libdude.so.cfi.color
test dude.exe.cfi libfoo.so.cfi libdude.so.cfi
test dude.exe.cfi libfoo.so.cfi libdude.so.cfi.color
test dude.exe.cfi libfoo.so.cfi.color libdude.so.cfi
test dude.exe.cfi.color libfoo.so.orig libdude.so.orig
test dude.exe.cfi.color libfoo.so.cfi libdude.so.orig
test dude.exe.cfi.color libfoo.so.cfi.color libdude.so.orig
test dude.exe.cfi.color libfoo.so.orig libdude.so.cfi
test dude.exe.cfi.color libfoo.so.orig libdude.so.cfi.color
test dude.exe.cfi.color libfoo.so.cfi libdude.so.cfi
test dude.exe.cfi.color libfoo.so.cfi libdude.so.cfi.color
test dude.exe.cfi.color libfoo.so.cfi.color libdude.so.cfi
test dude.exe.pie libfoo.so.orig libdude.so.orig # unprotected - should pass!
test dude.exe.pie libfoo.so.cfi libdude.so.orig
test dude.exe.pie libfoo.so.cfi.color libdude.so.orig
test dude.exe.pie libfoo.so.orig libdude.so.cfi
test dude.exe.pie libfoo.so.orig libdude.so.cfi.color
test dude.exe.pie libfoo.so.cfi libdude.so.cfi
test dude.exe.pie libfoo.so.cfi libdude.so.cfi.color
test dude.exe.pie libfoo.so.cfi.color libdude.so.cfi