0%

故障注入&检测流程

故障注入&检测流程

CPU故障注入&检测流程

处理源程序

  1. 将源代码转换成中间代码,划分了基本块
1
clang -S -g -emit-llvm dm_dist.c -o dm_dist.ll
  1. 给中间代码添加全局变量:调用Pass AddGlobalSig.so
1
opt -load ../AddGlobalSig.so -AddGlobalSig -S dm_dist.ll -o dm_dist.ll
  1. 对每个基本块进行脆弱性分析;并将结果输出至allindex.txt文件中
1
opt -load ../Index.so -Index -disable-output dm_dist.ll 2> allindex.txt

allindex.txt文件里面的内容为(基本块号,每个基本块里的指令数量)

  1. 执行排序程序,allindex.txt文件的内容按照基本块指令数量从小到大排序,并输出前n/3-1个基本块的块号至index.txt
1
pthon3 sort.py > index.txt
  1. 将脆弱性高的基本块进行再拆分. 这里的$lineindex.txt 里面存放的值
1
2
3
4
for line in `cat index.txt`
do
/home/yy2/Desktop/llvm/build/bin/opt -load /home/yy2/Desktop/llvm/build/lib/SplitBlock.so -SplitBlock -S -index $line dm_dist.ll -o dm_dist.ll
done
  1. 使用CFCSS对中间代码进行插桩 使用Pass:CFCSS.so
1
opt -load ../CFCSS.so -CFCSS -S dm_dist.ll -o cfcss.ll
  1. 编译.ll文件生成可执行程序
1
clang cfcss.ll -o dm_dist/dm_dist_cf

故障注入

调用auto.sh进行自动化注入

$1 待注入程序 $2 程序的输入文件(不懂) $3 运行次数 $4 p/r 故障注入方式 $5 守护进程检测时间间隔

1
./auto.sh ../qt/TestProgram/dm_dist/dm_dist_cf input_small.dat "2500" "r" "3"

auto.sh里面调用gdb工具进行故障注入。start.py

结果分析

调用python文件进行结果分析:使用了statistics.py

1
python3 ../qt/CPUControl/fault_inject/statistics.py inject.output inject.correct

寄存器故障注入&检测流程

标签扩展

  1. 使用clang将源程序转化为中间代码
1
clang dm.cpp --target=arm-v7-linux-gnueabi -emit-llvm -g -S -o dm.ll
  1. 加固程序,给中间代码添加编号
1
opt -load ../pass/build/libgenLLFIIndex/libgenLLFIIndex.so -genllfiindexpass -S dm.ll -o dm_id.ll
  1. 加固,通过冗余进行程序加固
1
opt -load ../pass/build/libdmr/libdmr.so -eddi -select_set_file=../xzt_jcq/index.txt -S dm_id.ll -o dm_df.ll

交叉编译

  1. 编译程序,生成链接文件 生成.o文件
1
clang dm_df.ll --target=arm-v7-linux-gnueabi -c -o dm_df.o
  1. 链接程序,生成可执行文件
1
arm-linux-gnueabi-gcc dm_df.o exec.o -static -o dm_df

故障注入

通过gem5对可执行程序进行故障注入

通过for循环执行n次命令,从而进行n次故障注入

1
../res/gemFI/build/ARM/gem5.opt ../res/gemFI/configs/example/se.py -c dm_df

结果分析

1
python ./.statistics.py

IO故障注入&检测流程

加固

1
2
arm-linux-gnueabi-g++ ../qt/IO/benchmark/dm/ManagerTask.cpp ../Desktop/qt/IO/benchmark/dm/dm.cpp -static -g -o /../Desktop/qt/IO/benchmark/dm/IOFaultTolerance
arm-linux-gnueabi-g++ ../Desktop/qt/IO/benchmark/dm/dm_dist.cpp ../Desktop/qt/IO/benchmark/dm/exec.cpp -static -g -o ../Desktop/qt/IO/benchmark/dm/dm_dist.out

故障注入

1
2
3
../home/yy2/res/gemFI/build/ARM/gem5.opt /home/yy2/res/gemFI/configs/example/se.py -c 
../Desktop/qt/IO/benchmark/dm/dm.out
../res/gemFI/build/ARM/gem5.opt /gemFI/configs/example/se.py -c ../Desktop/qt/IO/benchmark/dm/IOFaultTolerance

结果分析

1
python statistic.py #调用的是/home/yy2/Desktop/qt/IO/benchmark/dm/fiwork/fi/golden/out.txt

LLVM IR

生成.ll文件

1
../Desktop/llvm/build/bin/clang -S -g -emit-llvm dm_dist.c -o dm_dist.ll
正在加载今日诗词....