這個,其實挺坑的。使用方法很詭異。
首先
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