故障注入&检测流程 CPU故障注入&检测流程 处理源程序
将源代码转换成中间代码,划分了基本块
1 clang -S -g -emit-llvm dm_dist.c -o dm_dist.ll
给中间代码添加全局变量: 调用Pass
AddGlobalSig.so
1 opt -load ../AddGlobalSig.so -AddGlobalSig -S dm_dist.ll -o dm_dist.ll
对每个基本块进行脆弱性分析; 并将结果输出至allindex.txt
文件中
1 opt -load ../Index.so -Index -disable-output dm_dist.ll 2> allindex.txt
allindex.txt
文件里面的内容为(基本块号,每个基本块里的指令数量)
执行排序程序, 将allindex.txt
文件的内容按照基本块指令数量从小到大排序,并输出前n/3-1个基本块的块号至index.txt
1 pthon3 sort.py > index.txt
将脆弱性高的基本块进行再拆分. 这里的$line
是 index.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
使用CFCSS
对中间代码进行插桩 使用Pass:CFCSS.so
1 opt -load ../CFCSS.so -CFCSS -S dm_dist.ll -o cfcss.ll
编译.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
寄存器故障注入&检测流程 标签扩展
使用clang将源程序转化为中间代码
1 clang dm.cpp --target=arm-v7-linux-gnueabi -emit-llvm -g -S -o dm.ll
加固程序,给中间代码添加编号
1 opt -load ../pass/build/libgenLLFIIndex/libgenLLFIIndex.so -genllfiindexpass -S dm.ll -o dm_id.ll
加固,通过冗余进行程序加固
1 opt -load ../pass/build/libdmr/libdmr.so -eddi -select_set_file=../xzt_jcq/index.txt -S dm_id.ll -o dm_df.ll
交叉编译
编译程序,生成链接文件 生成.o文件
1 clang dm_df.ll --target=arm-v7-linux-gnueabi -c -o dm_df.o
链接程序,生成可执行文件
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
结果分析
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
结果分析
LLVM IR 生成.ll文件
1 ../Desktop/llvm/build/bin/clang -S -g -emit-llvm dm_dist.c -o dm_dist.ll