GDBitflip [v1.04]
Runtime fault injection platform by Daniele Rizzieri (2021)
This platform executes N times a binary and during each execution it injects a bitflip in a random register, at a random time, then let the execution finish and observes/reports the outcomes.
Requirements
Required Linux packages:
- python3
- procps
- gdb (configured with --with-python option, usually by default)
Test Binary File Guidelines
In order to be properly testable, the program under test must be compliant with the following guidelines:
- Application's output must be redirected to the standard output virtual file (i.e., it must be instructed to print the functional results to screen/console)
- Application's behaviour and functional output must be fully deterministic: the tester must ensure that the entire code does not depend on time or other random variables. Examples:
- if some kind of randomization function is involved, the tester must fix the randomization seed;
- if some kind of time related function is involved, the tester must either suppress it or fix the time dependant variable;
- The test application must be compiled from code, following the here reported guidelines:
- During the compilation the debug symbols must be included using the GCC option "-g"
- The application must be statically linked, through the "-static" compilation option
- When compiling, the tester should avoid the compiler optimization options "-o#"
Quick Start
-
Remember to compile binary under test with -g option (to include debug symbols) and without optimization flags -O
-
Remember to make the binary file executable
-
Type "python3 gdbitflip.py -h" or "python3 gdbitflip.py --help" for usage info:
Usage: python3 gdbitflip.py PATH/TO/BINARY -n [--args
ARGS] [options]
required:
PATH/TO/BINARY Path (relative or absolute) to binary file under test
-n , = number of injections
optional:
--argsARGS
= number of args of binary;
ARGS = argument of program divided by space
-s r_seed, Set the random seed to r_seed
-v, --verbose, To produce verbose execution report
-c, --clean, To clean the bitflipped results folder and exit
-z, --zip, To compact all the reports in ./exec_reports/ in a summary in ./exec_reports/SUMMARIES/
-
See crash report in the file indicated at end of execution.
-
See execution report in the file indicated at end of execution.
Output File Locations
- ./bitflipped_results/ --> functional results of the binaries
- ./core_dumps/ --> coredumps file of crashed processes
- ./crash_reports/ --> reports containing info about the crashed processes
- ./crash_logs/ --> log files from gdb analysis of the coredumps
- ./exec_reports/ --> reports containing info about the exit codes, correctness of results and hang processes