标签:LLVM x86 lib libFuzzer char RTfuzzer 64 main 方法
这个,其实挺坑的。使用方法很诡异。
首先
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文件来编译,然后就是编译参数
编译完之后,程序就出来了,程序很大。。。
执行程序,代码必崩
如果要复现这个崩溃,只需要执行的时候加个参数就好了,比如
我代码写的问题,所有参数都崩,所以我随便怎么加参数都崩,所以就这样了,
如果需要看帮助,可以这样
好了,就是这么玩的,
其他代码细节就太简单了,看下代码就会了。
结束了,玩完了,没准可以用它玩玩别的代码呢。
标签:LLVM,x86,lib,libFuzzer,char,RTfuzzer,64,main,方法 来源: https://www.cnblogs.com/suanguade/p/13838125.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。