KLEE安装:KLEE2.2 Ubuntu202.04
装了2天尝试了几个版本最终成功,吐了。github上的库不知道为什么突然clone不下来了,换了gitee源。
参考:klee-2.1安装(按照这个博客,闭着眼都能成功!)_klee的安装与配置-CSDN博客、ubuntu安装符号执行引擎KLEE_ubnutu20.04安装klee-CSDN博客、LLVM 9 (recommended) · KLEE。
1.准备环境
1.1安装以下依赖:
$ sudo apt-get install build-essential curl libcap-dev git cmake libncurses5-dev python3-minimal python-pip unzip libtcmalloc-minimal4 libgoogle-perftools-dev libsqlite3-dev doxygen
$ pip3 install tabulate wllvm
$ apt install gcc g++
1.2安装LLVM:
版本9.0
git clone https://gitee.com/mirrors/LLVM.git
cd llvm-9.0/
mkdir build
cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm
make -j 8
make install
报错:
错误信息里提示 std::string 未定义,并且建议包含 <string> 头文件。在 llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h 文件的第 19 行之前添加 #include <string>。
同时,还需要确保包含 <cstdint> 头文件,因为代码里使用了 uint8_t、uint16_t、uint32_t 和 uint64_t 这些类型。在 MicrosoftDemangleNodes.h 文件中添加:#include <cstdint>。
编译器不支持 C++ 标准,LLVM 9.0 要求使用支持 C++11 或更高版本的编译器。你可以在编译配置时指定 C++ 标准,例如在使用 CMake 配置时添加以下选项:
mkdir build
cd build
cmake -DLLVM_ENABLE_PROJECTS="clang;lld" -DCMAKE_CXX_STANDARD=11 ..
make
1.3 安装约束求解器:
可选:
这里我选的Z3.
git clone https://gitee.com/merlin7/z3.git #4.8.8版本
unzip z3-4.8.8.zip
cd z3-4.8.8
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
报错:/home/liu/KLEE/klee-2.2/lib/Solver/Z3Solver.cpp:360:48: error: use of undeclared identifier 'Z3_TRUE'; did you mean 'Z3_L_TRUE'? /*model_completion=*/Z3_TRUE, &arrayElementExpr); ^~~~~~~ Z3_L_TRUE /usr/include/z3_api.h:93:5: note: 'Z3_L_TRUE' declared here Z3_L_TRUE ^ /home/liu/KLEE/klee-2.2/lib/Solver/Z3Solver.cpp:427:44: error: use of undeclared identifier 'Z3_TRUE'; did you mean 'Z3_L_TRUE'? /*model_completion=*/Z3_TRUE, &rawEvaluatedExpr); ^~~~~~~ Z3_L_TRUE /usr/include/z3_api.h:93:5: note: 'Z3_L_TRUE' declared here Z3_L_TRUE ^ 2 errors generated.
在编译 Z3Solver.cpp 文件时,代码里使用了未声明的标识符 Z3_TRUE,编译器建议你使用 Z3_L_TRUE 来替代。下面为你详细分析并给出解决办法:
编辑 Z3Solver.cpp 文件,把其中所有的 Z3_TRUE 替换成 Z3_L_TRUE。可以使用以下命令来完成替换:
sed -i 's/Z3_TRUE/Z3_L_TRUE/g' /home/liu/KLEE/klee-2.2/lib/Solver/Z3Solver.cpp
在完成替换之后,你需要重新运行 CMake 配置项目,然后再次编译:
# 进入构建目录
cd /home/liu/KLEE/klee-2.2-build
# 重新运行 CMake 配置
cmake -DENABLE_SOLVER_Z3=ON -DENABLE_POSIX_RUNTIME=ON -DENABLE_KLEE_UCLIBC=ON -DKLEE_UCLIBC_PATH=/home/liu/KLEE/klee-uclibc -DLLVM_CONFIG_BINARY=/home/liu/KLEE/llvm-9.0/build/bin/llvm-config -DLLVMCC=/home/liu/KLEE/llvm-9.0/build/bin/clang -DLLVMCXX=/home/liu/KLEE/llvm-9.0/build/bin/clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../klee-2.2
# 重新编译项目
make
1.4 安装uclibc和posix运行环境:
git clone https://gitee.com/Celephais/klee-uclibc.git
cd klee-uclibc
./configure --make-llvm-lib
make -j 8
2.编译KLEE
下载KLEE2.2
unzip v2.2.zip
cd klee-v2.1
mkdir build
cd build
cmake -DENABLE_SOLVER_Z3=ON -DENABLE_POSIX_RUNTIME=ON -DENABLE_KLEE_UCLIBC=ON -DKLEE_UCLIBC_PATH=/.../.../klee-uclibc -DLLVM_CONFIG_BINARY=/.../.../llvm-9.0/llvm-src/build/bin/llvm-config -DLLVMCC=/.../.../llvm-9.0/llvm-src/build/bin/clang -DLLVMCXX=/.../.../llvm-9.0/llvm-src/build/bin/clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
make -j8
make install
报错:
In source builds are not allowed. You should invoke CMake from a different directory. -- Configuring incomplete, errors occurred! See also "/home/liu/KLEE/klee-2.2/CMakeFiles/CMakeOutput.log".
首先,要确保 klee-2.2 源码目录和 klee-2.2-build 构建目录都处于干净状态,没有残留的 CMake 配置文件。
# 清理 klee-2.2 源码目录
cd /home/liu/KLEE/klee-2.2
rm -rf CMakeCache.txt CMakeFiles
# 清理 klee-2.2-build 构建目录
cd /home/liu/KLEE/klee-2.2-build
rm -rf CMakeCache.txt CMakeFiles
CMake 不允许在源码目录中进行构建,也就是不能直接在 klee-2.2 目录下运行 CMake 命令,需要在一个单独的构建目录里执行 CMake 操作。
cd /home/liu/KLEE
mkdir klee-2.2-build
cd klee-2.2-build
在新创建的 klee-2.2-build 目录下运行之前的 CMake 命令,注意路径要根据实际情况进行调整。
cmake -DENABLE_SOLVER_Z3=ON -DENABLE_POSIX_RUNTIME=ON -DENABLE_KLEE_UCLIBC=ON -DKLEE_UCLIBC_PATH=/home/liu/KLEE/klee-uclibc -DLLVM_CONFIG_BINARY=/home/liu/KLEE/llvm-9.0/build/bin/llvm-config -DLLVMCC=/home/liu/KLEE/llvm-9.0/build/bin/clang -DLLVMCXX=/home/liu/KLEE/llvm-9.0/build/bin/clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ../klee-2.2

浙公网安备 33010602011771号