ubuntu16.04安装klee

ubuntu16.04安装klee(基于llvm 3.8)教程

前言

查阅了很多资料,踩了不少的坑,总的来说,这个应该是比较完善的基于llvm3.8和ubuntu16.04的安装教程,至少我自己按照这个没有问题,而且可能遇到的坑也写在了这里。如果你有什么疑问,欢迎评论。

进入klee官网

http://klee.github.io/

选择Documentation 的BuildingKLEE(LLVM3.8 - experimental)

安装依赖包

可以使用apt来进行依赖包安装

$ sudo apt-get install build-essential	
	curl libcap-dev git cmake libncurses5-dev	
	python-minimal python-pip unzip libtcmalloc-minimal4 
	libgoogle-perftools-dev

安装llvm3.8

先尝试执行

$ sudo apt-get install clang-3.8 llvm-3.8 llvm-3.8-dev llvm-3.8-tools  

如果报错,那就只能下载源代码进行安装

源代码安装llvm3.8

参考这个链接

https://blog.csdn.net/mchtnwn/article/details/56676163

在当前目录下建立文件夹

mkdir ~/llvm-lang
cd llvm-clang

下载llvm源代码

wget http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz
tar xf llvm-3.8.0.src.tar.xz
mv llvm-3.8.0.src llvm

下载clang的源代码

cd llvm/tools
wget http://llvm.org/releases/3.8.0/cfe-3.8.0.src.tar.xz
tar xf cfe-3.8.0.src.tar.xz
mv cfe-3.8.0.src clang
cd ../..

下载clang-tools-extra的源代码

cd llvm/tools/clang/tools
wget http://llvm.org/releases/3.8.0/clang-tools-extra-3.8.0.src.tar.xz
tar xf clang-tools-extra-3.8.0.src.tar.xz
mv clang-tools-extra-3.8.0.src  extra
cd ../../../..

下载compiler-rt的源代码

cd llvm/projects
wget http://llvm.org/releases/3.8.0/compiler-rt-3.8.0.src.tar.xz
tar xf compiler-rt-3.8.0.src.tar.xz
mv compiler-rt-3.8.0.src compiler-rt
cd ../..

配置编译选项

cd llvm-lang
mkdir llvm-build
cd llvm-build
../llvm/configure --enable-optimized

此种配置,llvm-clang默认安装到目录/usr/local下,如果想改变安装目录,则加上配置:
--prefix=Path来指定输入。

进入llvm-build目录

执行

make -j4
sudo make install

验证成功
clang -v

如果是3.8的话,那就表明安装成功

安装求解器

求解器有很多种,主流的有STP,Z3;
这里我们安装Z3

git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py
cd build
make
sudo make install

参考链接

https://github.com/z3prover/z3

安装uclibc和POSIX环境

$ git clone https://github.com/klee/klee-uclibc.git  
$ cd klee-uclibc  
$ ./configure --make-llvm-lib  
$ make -j2  
$ cd ..

下载Google test sources

$ curl -OL https://github.com/google/googletest/archive/release-1.7.0.zip
$ unzip release-1.7.0.zip

安装lit

$ pip install lit

安装tcmalloc

$ sudo apt-get install libtcmalloc-minimal4 libgoogle-perftools-dev

下载klee源代码 并且配置

$ git clone https://github.com/klee/klee.git
$ mkdir klee_build_dir
cd klee_build_dir
$ cmake <CMAKE_OPTIONS> <KLEE_SRC_DIRECTORY>

最后一行的<>内容是配置选项,可以这样写

$ cmake -DENABLE_SOLVER_Z3=ON 
	-DENABLE_POSIX_RUNTIME=ON  
	-DENABLE_KLEE_UCLIBC=ON 
	-DKLEE_UCLIBC_PATH=../klee-uclibc 
	-DGTEST_SRC_DIR=../googletest-release-1.7.0  
	-DENABLE_SYSTEM_TESTS=ON  
	-DENABLE_UNIT_TESTS=ON 
	../klee

使用绝对路径有可能会编译失败,因此使用相对路径

如果找不到doxygen,那就进行安装

$ sudo apt-get install doxygen

如果缺乏zlib,那么编译也会失败

sudo apt-get install zlib1g-dev

参考链接

在ubuntu中安装zlib

https://blog.csdn.net/wsclinux/article/details/50494501?utm_source=blogkpcl2

编译安装klee

$ make
$ sudo make install

安装注意事项

参考链接
http://terenceli.github.io/技术/2017/06/08/klee-newbie
中使用了llvm3.9安装klee,但是官网最高只支持3.8,因此照搬会导致安装出错,
这里就老老实实使用3.8

使用docker安装klee

$sudo apt install docker
$sudo apt install docker.io
$docker pull klee/klee

$ git clone https://github.com/klee/klee.git
$ cd klee
$ docker build -t klee/klee .
//创建一个klee的docker容器
$ docker run --rm -ti --ulimit='stack=-1:-1' klee/klee
原文地址:https://www.cnblogs.com/goto2091/p/13683275.html