introspection-result-checking

To build the tool:


mkdir build
cd build
cmake ../
make

Setting up file to mark functions as sensitive:


Add all sensitive function names to a file, with one function name per line.

To run the tool:


  • dump llvm bitcode for further instrumentation

    clang source.c -c -emit-llvm

  • Dump llvm bitcode of response function

    clang ../response_lib.c -c -emit-llvm

  • Run llvm transformation pass to add guards into each sensitive function

    opt -load ../build/lib/libresult-checking.so source.bc -insert-guards -sensitive-functions sensitive.txt -connectivity-level <con_level> -o protected.bc

  • link bitcode from the previous step with the bitcode of external library containing an integrity checker function.

    llvm-link protected.bc response_lib.bc -o protected.bc

  • Compile resulting bitcode into a binary

    clang -rdynamic protected.bc -o out