The NIONKA tool performs predicate flipping for a program. The process of dynamically tracking a program's execution and flipping the outcome of certain predicates in the program is known as execution hijacking. NIONKA has 3 versions, NIONKA-Java that operates at bytecode level and can be used for hijacking of Java programs, NIONKA-LLVM that operates on LLVM byte code level and NIONKA-x86 that operates on x86 binary code. All tools are based on code instrumentation, which consists of replacing every predicate in the program with an alternative predicate that invokes a checking function. The outcome of the predicate is passed to the checking function and at runtime decides whether a predicate should be flipped or not. The information about which predicates to be flipped is read at the beginning of the execution. NIONKA is used to implement the Execution hijacking technique, a technique for improving the effectiveness of dynamic analysis.
NIONKA-Java depends on Soot, a Java optimization framework that allows performing of Java bytecode analysis and rewriting.
NIONKA-x86 depends on Valgrind, an instrumentation framework for building dynamic analysis tools.
NIONKA-LLVM depends on LLVM 2.6, an open source compiler infrastructure for C/C++.