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_tuint16_tuint32_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

 

posted @ 2025-03-13 16:58  种玫瑰的小刘  阅读(160)  评论(0)    收藏  举报