zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    支付宝H5 与网页端支付开发
    java图片操作--生成与原图对称的图片
    java 图片的自定义大小
    微信公众号开发(2)---消息的接收发送
    js 创建对象
    jqery多选
    金额大写转换
    js数字转换
    js日期格式转换
    java设计模式
  • 原文地址:https://www.cnblogs.com/goto2091/p/13683275.html
Copyright © 2011-2022 走看看