Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
visual-fuzz-llvm
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
江峰
visual-fuzz-llvm
Commits
7f306143
Commit
7f306143
authored
Sep 03, 2024
by
phoon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add how_to_compile.txt and how_to_use.txt
parent
de1e8aa2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
53 additions
and
0 deletions
+53
-0
how_to_compile.txt
how_to_compile.txt
+11
-0
how_to_use.txt
how_to_use.txt
+42
-0
No files found.
how_to_compile.txt
0 → 100755
View file @
7f306143
# why add "-w", since afl-llvm-rt.o.c.o is not used during compiling period
# (used when link period), it will generate some warnings, which will cause some
# test failed when cmake or configure
# for Makefile build system (take gzip project for example)
CC="/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/clang -w -flto /home/phoon/workspace/fuzz/AFL/visual_mode/build/CMakeFiles/VisFuzzDriver.dir/driver/afl-llvm-rt.o.c.o" RANLIB=/bin/true AR=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/llvm-ar NM=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/llvm-nm ./configure
make -j20 V=1
# for CMake build project (take CMake project for example)
cmake -DCMAKE_C_COMPILER=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/clang -DCMAKE_CXX_COMPILER=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/clang++ -DCMAKE_C_FLAGS="-w -flto /home/phoon/workspace/fuzz/AFL/visual_mode/build/CMakeFiles/VisFuzzDriver.dir/driver/afl-llvm-rt.o.c.o" -DCMAKE_CXX_FLAGS="-w -flto /home/phoon/workspace/fuzz/AFL/visual_mode/build/CMakeFiles/VisFuzzDriver.dir/driver/afl-llvm-rt.o.c.o" -DCMAKE_RANLIB=/bin/true -DCMAKE_AR=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/llvm-ar -DCMAKE_NM=/home/phoon/workspace/fuzz/llvm-10-lto-pass/llvm-build-release-install/bin/llvm-nm .
make -j20 VERBOSE=1
how_to_use.txt
0 → 100644
View file @
7f306143
## 容器创建
docker run -it unifuzz:2.0 bash
## 编译源码工程
**首先在进行以下编译之前,要保证正常情况下是能够编译通过的,也就是工程相关的依赖都已经安装,我们假设工程依赖都已经安装好。**
我们以vim工程为例,说明下编译流程
- 用AFL编译工程生成用于fuzz的可执行文件(我们称之为fuzz_binary),该编译过程可以参照AFL编译流程,对应的vim编译流程为:
- $cd /path/to/vim-afl 进入到vim工程源码目录
- $CC=/home/AFL/afl-gcc ./configure
- $make -j20
- 完成之后我们可以得到AFL插桩后的可执行文件vim,也就是fuzz_binary
- 用llvm编译工程生成用于产生精确覆盖率的可执行文件(我们称之为visual_binary)和用于可视化展示的静态分析json文件(我们称之为visual_json),对应的vim编译流程为:
- $cd /path/to/vim-llvm 进入到另外一个vim工程源码目录(一般需要将源码压缩文件解压到两个不同的目录中,一个用于AFL的编译,一个用于llvm的编译)
- $CC="/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang" CFLAGS="-w -flto -g /home/afl-llvm-rt.o.c.o" CXX="/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang++" CXXFLAGS="-w -flto -g /home/afl-llvm-rt.o.c.o" LDFLAGS="-L/home/llvm-10-visual-mode-1.0/llvm-build-release-install/lib/clang/10.0.0/lib/linux -lclang_rt.builtins-x86_64" RANLIB=/bin/true AR=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-ar NM=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-nm ./configure(该构建命令对应的是Makefile构建系统,如果构建系统是cmake,相应的命令为cmake -DCMAKE_C_COMPILER=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang -DCMAKE_CXX_COMPILER=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang++ -DCMAKE_C_FLAGS="-w -flto -g /home/afl-llvm-rt.o.c.o" -DCMAKE_CXX_FLAGS="-w -flto -g /home/afl-llvm-rt.o.c.o" -DCMAKE_RANLIB=/bin/true -DCMAKE_AR=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-ar -DCMAKE_NM=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-nm .)
- Makefile构建系统的工程中,有时候上述configure构建命令会在编译时出现xxx.o: file not recognized: file format not recognized导致编译失败,这时可以用CC="/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang -w -flto -g /home/afl-llvm-rt.o.c.o" CXX="/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/clang++ -w -flto -g /home/afl-llvm-rt.o.c.o" LDFLAGS="-L/home/llvm-10-visual-mode-1.0/llvm-build-release-install/lib/clang/10.0.0/lib/linux -lclang_rt.builtins-x86_64" RANLIB=/bin/true AR=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-ar NM=/home/llvm-10-visual-mode-1.0/llvm-build-release-install/bin/llvm-nm ./configure构建命令来替代原来的构建命令
- $make -j20
- 完成之后我们可以得到llvm插桩后的可执行文件vim,也就是visual_binary,还有用于可视化展示的静态分析json文件vim-172825.json,其中172825表示该可执行文件中包含的基本块个数
# 镜像制作
- 用docker cp命令从容器中拷贝fuzz_binary、visual_binary、visual_json三个文件到本地
- docker cp container-id:/path/to/fuzz_binary /local/path/dir
- docker cp container-id:/path/to/visual_binary /local/path/dir
- docker cp container-id:/path/to/visual_json /local/path/dir
- 从容器中删除llvm目录和AFL目录(为了使生成的docker镜像尽可能小)
- docker exec -it container-id bash
- cd /home && rm -rf llvm-10-visual-mode-1.0 && rm -rf AFL
- export容器到镜像文件
- docker export -o image_name.tar container-id
- 用save命令生成镜像文件(原因是目前unifuzz网页系统不支持export命令生成的镜像文件,只支持save命令生成的镜像文件)
- docker import image_name.tar REPOSITORY:TAG
- docker run -it REPOSITORY:TAG bash(假设生成的容器为container-id2)
- docker commit container-id2 REPOSITORY1:TAG1
- docker save -o image_name2.tar REPOSITORY1:TAG1
**最终我们生成一个名字为image_name2.tar的镜像文件**
# 测试
- 正常的unifuzz测试参照unifuzz使用文档
- 精确覆盖率测试
- 首先在程序管理中找到要被测程序,点击修改
- 分别上传分析程序(对应于生成的visual_binary)、源代码(对应于源代码的压缩包)、JSON文件(对应于生成的visual_json)
- 在任务管理中找到对应的任务,点击启动按钮进行正常fuzz测试,运行一段时间后,点击“暂停”按钮,再点击“分析”按钮开始做精确覆盖率分析,等待分析完成,点击“详情”按钮,在详情页面点击“精确覆盖率”
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment