下面这段文字翻译于http://klee.github.io/getting-started/
KLEE搭建于LLVM平台,下面这些安装步骤基于LLVM 2.9(稳定版本),基于新版本LLVM 3.4还处于试验阶段参考 click here。实际上现在LLVM都已经是4版本了。
1 依赖软件安装:包括g++, curl, dejagnu, subversion, bison, flex, bc, libcap-devel),可能还不全,具体到不同系统下,其命令为:
$ sudo apt-get install g++ curl dejagnu subversion bison flex bc libcap-dev # Ubuntu
$ sudo yum install g++ curl dejagnu subversion bison flex bc libcap-devel # Fedora
在一些体系结构中,要再.bashrc文件中设置如下环境变量的设置:
$ export C_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
$ export CPLUS_INCLUDE_PATH=/usr/include/x86_64-linux-gnu
2015-1-25补: 上面这两句针对的是64为的操作系统,因为我安装的是i386,且32位的系统,所以在这里需要把x86_64-linux-gnu改为i386-linux-gnu。也不能不设置,否则在klee的make中会出错。
2 编译生成LLVM2.9:KLEE在linxux x86-64中进行过测试,在x86-32中可能会导致软件异常。
安装llvm-gcc: 下载llvm-gcchttp://llvm.org/releases/download.html#2.9 ) ,在x86-64 Linux平台则需要获取LLVM-GCC 4.2 Front End Binaries for Linux x86-64并安装(http://llvm.org/releases/2.9/llvm-gcc4.2-2.9-x86_64-linux.tar.bz2 ). 之后把llvm-gcc添加到路径PATH中。
下载并且编译LLVM 2.9:
$ tar zxvf llvm-2.9.tgz
$ cd llvm-2.9
$ ./configure –enable-optimized –enable-assertions
$ make
参数 –enable-optimized 可省略,如果使用新的kernels/glibc versions,可能会有一些兼容性问题。(吐槽:这些开源免费的货就是版本啊,兼容啊做的不够好。)
3 编译STP:KLEE缺省情况下使用STP作为约束求解器,下载链接(http://www.doc.ic.ac.uk/~cristic/klee/stp.html 这个版本和KLEE的应用结合没问题),当然也可以使用更新的版本。 具体编译生成命令如下:
$ tar xzfv stp-r940.tgz
$ cd stp-r940
$ ./scripts/configure –with-prefix=`pwd`/install –with-cryptominisat2
$ make OPTIMIZE=-O2 CFLAGS_M32= install
在使用STP前,需先运行下面这个命令(STP文档中建议),当然也可以把这个命令写入到/etc/seurity/limits.conf中
$ ulimit -s unlimited #这个命令用于解除打开文件个数的限制。
4 编译uclibc和POSIX environment model,这个步骤可选,也就是可以不做。如果要做,按照下面步骤:
$ git clone https://github.com/klee/klee-uclibc.git
$ cd klee-uclibc
$ ./configure –make-llvm-lib
$ make -j2
$ cd ..
5 下载KLEE,新建一个目录,在目录里面运行:
$ git clone https://github.com/klee/klee.git
6 配置KLEE,进入KLEE目录,运行:
$ ./configure –with-llvm=full-path-to-llvm –with-stp=full-path-to-stp/install –with-uclibc=full-path-to-klee-uclibc –enable-posix-runtime
注意:如果你跳过步骤4,那么把上述命令中的参数–with-uclibc和 –enable-posix-runtime 移除.
7 编译KLEE:
$ make ENABLE_OPTIMIZED=1
8 验证结果:
$ make check
$ make unittests
我的按照这个步骤做了几次,检查都有问题,不过也能用,貌似一些变量、参数没有设置好。也就是除了上述步骤,其它还有些要设置的。我自己做都会零散设置,所以没法写出来。
2015-1-25补:最后总是make check有几个错误,看了一下,大概是因为klee.h文件没有包括在内的问题,可是设定了klee.h所在目录后,又有klee.h中关联的几个lib找不到,不知道问题出在哪里。不过能够正确make后,基本都可以使用了,只不过在自己的程序中include klee.h时会出错,包括klee的第二个例子中也有引入klee.h,所以编译不了,不过去掉后是可以的.
Later, I add kleeDir/include to environment variable. It can find klee.h, but still has some errors during “make check”.
the result of make check is in the following :
********************
Testing Time: 365.22s
********************
Failing Tests 3):
KLEE :: Concrete/_testingUtils.c
KLEE :: Feature/ExprLogging.c
KLEE :: Programs/pcregrep.c
Expected Passes : 131
Expected Failures : 1
Unsupported Tests : 23
Unexpected Failures: 3
make[1]: *** [check-local] Error 1
make[1]: Leaving directory `/home/fjnuzs/Downloads/klee/test’
make: *** [check] Error 2
KLEE can work, I don’t know if there is any problem.