Execute ScEpTIC AnalysisΒΆ

For each program you need to analyze with ScEpTIC, you need to:

  1. Generate the LLVM IR of your program, as we describe in Target Program Compilation

  2. Configure ScEpTIC and your target architecture, as we describe in ScEpTIC Configuration

To run our analysis, we first need to import the ScEpTIC module and our configuration file. Then, we initialize ScEpTIC using its init() method, and then we need to call the run_tests() module.

For example, if our configuration is saved inside config.py:

import ScEpTIC
import config

sc = ScEpTIC.init(config)
sc.run_tests()

This runs all the analysis that we enabled in the configuration file.

ScEpTIC exposes also a run_test() method, which takes as parameters the name of the file containing the analysis implementation and the name of its class. For example, if we want to execute the analysis for locating memory-based intermittence anomalies, we can run:

import ScEpTIC
import config

sc = ScEpTIC.init(config)
sc.run_test('memory_locate', 'LocateMemoryAnomaliesInterruptionManager')

Note that, as we describe in our technical report, we can extend ScEpTIC analysis by extending the InterruptionManager base class, and then saving the new analysis inside ScEpTIC/emulator/intermittent_executor/interruption_managers/.

When ScEpTIC terminates the analysis execution, it saves the analysis results inside a sub-directory that is inside the save_dir directory that we specified in the configuration file. Each result directory contains two sub-folders:

  • code: contains a txt file for each function. Each file contains the modified LLVM IR of a function of the program, which ScEpTIC uses for emulating the program execution

  • states: contains a txt file that contains a textual representation of the states of register file, memory, input, and outputs at the end of the simulation execution

Then, we have a .txt file for each different analysis that we choose to run, which contains the analysis results.