LLVM + libFuzzer 使用方法
这个,其实挺坑的。使用方法很诡异。
首先
https://www.cnblogs.com/suanguade/p/13833360.html
用以上帖子的方法,重新完整编译LLVM的项目,
其实也不用太完整,主要是需要集成
”Compiler-RT“相关的库,
因为 libFuzzer 相关的功能都在这个库里。
以上都做完了之后,需要使用的模块大致有三个
1:生成出来的 clang.exe
2:RTfuzzer_main.x86_64.lib 库
3:RTfuzzer.x86_64.lib 库
三个模块分别有不同的用途。
模块1:是编译器,编译fuzzer程序,需要使用模块1
模块2:是main函数库,最大的用途是,帮助我。。。让我少写个main函数,其实也没啥用
模块3:是主要的 Fuzz 库,相关功能都在里面
都有了之后,写代码。
1 #include <stdio.h> 2 3 typedef unsigned char uint8_t; 4 typedef unsigned __int64 size_t; 5 6 extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) { 7 char z = 'z'; 8 char* sz = (char *)z; 9 *sz = (char )*data; 10 printf("123\n"); 11 return 0; 12 }
就这点代码,就够了。
稳定必崩。
然后使用clang 编译,命令如下:
clang++.exe -LL:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\fuzzer\RTfuzzer_main.x86_64.dir\RelWithDebInfo\RTfuzzer_main.x86_64.lib -LL:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\fuzzer\RTfuzzer.x86_64.dir\RelWithDebInfo\RTfuzzer.x86_64.lib -fsanitize=fuzzer -fsanitize=address main.cpp
看起来挺长的,其实主要部分就三块。
导入两个lib,(其实不导入也没关系,我习惯这么写是因为开发必须知道自己都干了啥)
传入一个cpp文件来编译,
然后就是编译参数,
编译完之后,程序就出来了,程序很大。。。
执行程序,代码必崩
如果要复现这个崩溃,只需要执行的时候加个参数就好了,比如
我代码写的问题,所有参数都崩,所以我随便怎么加参数都崩,所以就这样了,
如果需要看帮助,可以这样
好了,就是这么玩的,
其他代码细节就太简单了,看下代码就会了。
结束了,玩完了,没准可以用它玩玩别的代码呢。
再补一句
如果要用VS来编译的话,需要导入这一大堆库,能编,但是可能不全
1 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\asan\RTAsan.x86_64.dir\RelWithDebInfo\RTAsan.x86_64.lib 2 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\asan\RTAsan_dynamic_version_script_dummy.x86_64.dir\RelWithDebInfo\RTAsan_dynamic_version_script_dummy.x86_64.lib 3 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\asan\RTAsan_preinit.x86_64.dir\RelWithDebInfo\RTAsan_preinit.x86_64.lib 4 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\fuzzer\RTfuzzer.x86_64.dir\RelWithDebInfo\RTfuzzer.x86_64.lib 5 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\fuzzer\RTfuzzer_main.x86_64.dir\RelWithDebInfo\RTfuzzer_main.x86_64.lib 6 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\interception\RTInterception.x86_64.dir\RelWithDebInfo\RTInterception.x86_64.lib 7 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\lsan\RTLSanCommon.x86_64.dir\RelWithDebInfo\RTLSanCommon.x86_64.lib 8 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonCoverage.x86_64.dir\RelWithDebInfo\RTSanitizerCommonCoverage.x86_64.lib 9 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonLibc.x86_64.dir\RelWithDebInfo\RTSanitizerCommonLibc.x86_64.lib 10 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonLibcNoHooks.x86_64.dir\RelWithDebInfo\RTSanitizerCommonLibcNoHooks.x86_64.lib 11 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonNoHooks.x86_64.dir\RelWithDebInfo\RTSanitizerCommonNoHooks.x86_64.lib 12 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonNoLibc.x86_64.dir\RelWithDebInfo\RTSanitizerCommonNoLibc.x86_64.lib 13 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonNoTermination.x86_64.dir\RelWithDebInfo\RTSanitizerCommonNoTermination.x86_64.lib 14 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonSymbolizer.x86_64.dir\RelWithDebInfo\RTSanitizerCommonSymbolizer.x86_64.lib 15 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\RTSanitizerCommonSymbolizerNoHooks.x86_64.dir\RelWithDebInfo\RTSanitizerCommonSymbolizerNoHooks.x86_64.lib 16 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\ubsan\RTUbsan.x86_64.dir\RelWithDebInfo\RTUbsan.x86_64.lib 17 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\ubsan\RTUbsan_cxx.x86_64.dir\RelWithDebInfo\RTUbsan_cxx.x86_64.lib 18 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\ubsan\RTUbsan_standalone.x86_64.dir\RelWithDebInfo\RTUbsan_standalone.x86_64.lib 19 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\SancovDynamicRuntimeThunk.x86_64.dir\RelWithDebInfo\SancovDynamicRuntimeThunk.x86_64.lib 20 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\SancovWeakInterception.x86_64.dir\RelWithDebInfo\SancovWeakInterception.x86_64.lib 21 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\SanitizerCommonDynamicRuntimeThunk.x86_64.dir\RelWithDebInfo\SanitizerCommonDynamicRuntimeThunk.x86_64.lib 22 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\sanitizer_common\SanitizerCommonWeakInterception.x86_64.dir\RelWithDebInfo\SanitizerCommonWeakInterception.x86_64.lib 23 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\ubsan\UbsanDynamicRuntimeThunk.x86_64.dir\RelWithDebInfo\UbsanDynamicRuntimeThunk.x86_64.lib 24 L:\LLVM\llvm-11.0.0.src\project\projects\compiler-rt\lib\ubsan\UbsanWeakInterception.x86_64.dir\RelWithDebInfo\UbsanWeakInterception.x86_64.lib
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2014-10-19 特殊的一卦