FiE on Firmware!

Getting Started


Intro

FiE has a pluggable architecture. As such, the codebase is laid out with the capability to drop in new components. However, wrangling all of these pieces can be difficult, especially when considering all of the libraries that FiE depends on. To ease this process, we distribute a tarball complete with the most of the components that FiE uses. This tarball can be downloaded here

FiE was developed on a 64-bit Ubuntu 12.04 (Precise Pangolin). This is the setup that we recommended, though we have also successfully installed and run FiE on RHEL 5. We strove to make these instructions complete, but if you notice any problems, contact davidson@cs.wisc.edu


Getting Dependencies

  • General-Purpose
    If you are running Ubuntu (and have sudo privileges), you can download most of the packages using apt-get:

    sudo apt-get install g++ bison flexl

The following packages are bundled with FiE in the dependencies/ folder. They will be automatically configured and build when building FiE. If you aren't using the full FiE bundle then see the instructions here for getting and building stp and llvm-2.9.
  • STP
    STP is the SMT solver used by FiE to solve the underlying constraints generated during symbolic execution.
  • llvm-2.9
    Since FiE processes programs in LLVM bitcode, it needs llvm libraries to reason about bitcode instructions. FiE also uses the llvm linker to re-link object files together for analysis.
  • clang-2.9
    Clang is needed during the build process to build stub behavior which would otherwise be provided by the hardware. It is also necessary to use clang version 2.9 to compile input to FiE.

Building FiE

Configure FiE using the standard configure script:
    cd fie
    ./configure
In addition to recursively invoking child configure scripts, this script will also create a file env.src at the root of your FiE source tree. This file can be sourced to set up environment variables needed during when you install and invoke FiE. The following environment variables are set by env.src:
  1. C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
  2. CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
  3. PATH=LLVM_BIN:FIE_BIN:$PATH
Where LLVM_BIN is the directory is a directory where the llvm-2.9 and clang binaries reside and FIE_BIN is the location where the fie binary resides (this will be determined by the configure script). Items one and two are dependencies inherited from the underlying KLEE implementation, and may be necessary for your architecture.

At this point, everything is ready to go. Run

    make
and wait for everything to build. If you are building the complete bundle with llvm and clang included, this can take some time.