Fuzz测试之libfuzzer高频报错问题FAQ
Fuzz测试之libfuzzer高频报错问题FAQ
- 场景问题
- 报错解决
- 编译阶段
- 运行阶段
- 进阶资料
本文小结fuzz测试遇到的高频问题及其解答。
场景问题
Q:fuzz主调函数OneInput/Initialize区别?
A:前者fuzz而框架的main函数中无限次循环,后者仅开始运行时调用初始化一次。
Q:如何调用手机当前fuzz目录下的动态库?
A:由于非系统路径动态库,每次运行的时候都需要提前手动配置下。解决方法如下
- 法1:运行时链接当前xx目录下的动态库,指令:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/xx
- 法2:运行时链接指定xx.so动态库,指令:
export LD_PRELOAD=/usr/lib/gcc/aarch64-linux-gnu/7.5.0/xx.so
- 法3:运行可执行文件时指定链接动态库目录,指令:
LD_LIBRARY_PATH=./lib/ ./demo_exe -max_len=65535 -len_control=0 -detect_leaks=0 ./corpus
Q:如何回归测试fuzz崩溃的某条码流?
A:末尾指定对应特定码流文件路径,指令:LD_LIBRARY_PATH=./lib/ ./demo_exe -max_len=65535 -len_control=0 -detect_leaks=0 ./crash-ce3xfaf6a5217xxxbf5f95fafa103
Q:如何保存测试崩溃的码流,并指定其文件名前缀?
A:prefix
表示后面加的指定码流前缀文件名,./corpus
表示保存到当前corpus目录下。指令:LD_LIBRARY_PATH=./lib/ ./demo_exe -max_len=65535 -len_control=0 -artifact_prefix=./corpus_crash -detect_leaks=1 ./corpus
Q:运行指令不同参数分别代表什么意思?
A:以当前指令为例,指令:LD_LIBRARY_PATH=./lib/ ./demo_exe -max_len=65535 -len_control=0 -artifact_prefix=./corpus_crash -detect_leaks=1 ./corpus
LD_LIBRARY_PATH,
表示当前非系统动态库目录链接路径max_len,
设定输入的bytes乱流最大字节数len_control,
表示len的控制方式,默认为100,从小到大增长;为0,表示直接按最大len(max_len)来测试-detect_leaks=0,
不开启内存泄漏检测,加快fuzz速度-rss_limit_mb=4096,
给予4096M的内存使用空间-corpus,
存放当前的测试用例输入存放位置,本例中表示码流,对应oneinput中的data输入
Q:运行fuzz过程中的提示含义如何解读?
A:比如:\#52724 cov: 5041 ft: 24878 corp: 501/16Mb lim: 65535 exec/s: 4 rss: 97Mb L: 64554/65535 MS: 4 ChangeByte-CopyPart-CrossOver-ChangeBinInt
,参数解读如下:
- #52724:表示已经测试过52724个数据
- cov:当前已经覆盖的代码块或边数
- ft:尝试覆盖率的信号个数
- corp:当前随机序列的入口个数,及其所占用的内存大小
- lim:当前最大maxlen为65535字节,对应的oneinput函数中的size
- exec/s:迭代速度,每秒xx次
- rss:当前内存消耗
- L:当前输入的实际所占字节
报错解决
编译阶段
报错:ld: error: undefined symbol: std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::resize(unsigned long, char)
error:linker command failed with exit code 1
ld: error: undefined symbol: std::__ndk1::basic_streambuf<char, std::__ndk1::char_traits >::~basic_streambuf()
>>> FuzzerDataFlowTrace.cpp.o:(fuzzer::Command::toString() const) in archive D:/ProgramData/android-ndk-r23c/build//…/toolchains/llvm/prebuilt/windows-x86_64\lib64\clang\12.0.9\lib\linux\libclang_rt.fuzzer-aarch64-android.a
>>> referenced 18 more times
分析解决
- 根因:未在application.mk中链接C++相关的基础库
- 解决:在application.mk中,添加代码行:APP_STL := c++_shared
编译报错:无main函数等
ld: error: undefined symbol: LLVMFuzzerTestOneInput
>>> referenced by FuzzerMain.cpp:20 (out/llvm-project/compiler-rt/lib/fuzzer\FuzzerMain.cpp:20)
>>> FuzzerMain.cpp.o:(main) in archive D:/ProgramData/android-ndk-r23c/build//…/toolchains/llvm/prebuilt/windows-x86_64\lib64\clang\12.0.9\lib\linux\libclang_rt.fuzzer-aarch64-android.a
>>> did you mean to declare LLVMFuzzerTestOneInput(unsigned char const*, unsigned long) as extern “C”?【关键】【】【】
分析解决:
- andriod.mk中添加:cflags/ldflags要同时使用(以便于自动调用llvm的fuzzer main框架),这里可以解决无main问题,调用fuzzer框架里的main
LOCAL_CFLAGS += -fsanitize=fuzzer -fno-omit-frame-pointer
LOCAL_LDFLAGS += -fsanitize=fuzzer
- cc文件为CPP代码编译,其中C代码函数要用宏定义隔开,以免函数类型定义用cpp的方式导致无法
...cpp code#ifdef __cplusplusextern "C" {#endif...c code#ifdef __cplusplus}#endif
参考:https://stackoverflow.com/questions/48699256/clang-libfuzzer-undefined-reference-to-sanitizer-cov-trace-const-cmp8
运行阶段
报错:无程序报错行的具体偏移地址,无法反解析。ERROR: AddressSanitizer: heap-buffer-overflow on address
=25006==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x0050af50e175 at pc 0x006fd1344550 bp 0x007ffb7aeb10 sp 0x007ffb7ae2a0
READ of size 8300 at 0x0050af50e175 thread T0
AddressSanitizer:DEADLYSIGNAL
AddressSanitizer: nested bug in the same thread, aborting.
分析解决:
- 原因:手机运行缺乏clang生成的asan动态库,无法打桩得到具体出问题的函数信息
- 解决:
- 找到编译附带生成的库:libclang_rt.asan-aarch64-android.so,与libc++_shared.so和可执行文件同目录
- 同时注意编译选项:-g, o0
报错:CANNOT LINK EXECUTABLE “./demo_exe”: cannot locate symbol “__emutls_get_address”
CANNOT LINK EXECUTABLE "./demo_exe: cannot locate symbol “__emutls_get_address” referenced by “/data/local/tmp/”…
分析解决:
- 根因:无C++基础动态库:
libc++_shared.so
- 解决:
- application.mk中添加:
APP_STL := c++_shared
- 推入生成的库文件
libc++_shared.so
到手机 - 当前文件夹作为链接库,指令:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/tmp/xx
- application.mk中添加:
进阶资料
- The Art of Fuzzing - Demo 3: LibFuzzer Demonstration
- llvm-symbolizer指令解析官方详解,link
Fuzz测试之libfuzzer高频报错问题FAQ相关推荐
- Fuzz测试之libfuzzer使用小结
Fuzz测试之libfuzzer使用小结 背景 基本原理 使用方法 主调DEMO 参考资料 背景 项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试.fuzz测试是一种模糊测试方法,本质是 ...
- ceph-deploy离线部署ceph集群及报错解决FAQ
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- Wfuzz:一款强大的Web Fuzz测试工具 | 安装报错解决
Wfuzz是一个基于Python的Web爆破程序,它支持多种方法来测试WEB应用的漏洞.你可以审计参数.登录认证.GET/POST方式爆破的表单,并且可以发掘未公开的资源,比如目录.文件和头部之类的. ...
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...
- eas报错日记_(FAQ)EAS服务启动失败[金蝶EAS]
[问题]: (FAQ)EAS服务启动失败 版本: 6.0 模块: 系统部署 [答复]: 原因分析: 日志都是两周前的日志,显示都是SQLServer的数据库网络端口没有打开相关报错. 经沟通得知当前已 ...
- 统计本段话的高频词汇——报错:KeyError
项目场景: 编写程序,实现用户随机输入一段话,统计本段话的高频词汇 原来的代码 import jieba txt = input("请输入一段话:") words = jieba. ...
- PHP获取input中的值相同报错,laravel单元测试之phpUnit中old()函数报错解决_php实例...
前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问题,但是在phpUnit中就报错 错误原因: exception 'Runt ...
- fuzz测试之syzkaller(linux kernel fuzz)
目录 一.fuzz 二.syzkaller简介 三.syzkaller整体架构 四.使用syzkaller进行Linux内核漏洞挖掘 环境准备 构建 运行syzkaller 一.fuzz 模糊测试 ( ...
- golang defer 关闭文件 报错file may have nil or other unexpected value as its corresponding error
错误实例: file, err := os.Open("xxx.txt") defer file.Close() if err != nil {return err } 初学者很多 ...
最新文章
- ASP.NET的软件开发规范_转载
- mysql5.7中使用group by报错
- 二进制转base64
- 少儿编程150讲轻松学Scratch(十二)-Scratch编程算法练习-选择排序
- 实例探究Python以并发方式编写高性能端口扫描器的方法
- 【数据库基础知识】数据库表格——主键和外键
- mac vim 配置文件
- android微信支付代码,详解android微信支付实例代码
- python的模块导入问题_python的模块导入问题
- 从多态性谈动态联编的必要性(c++)
- VMware vSAN入门必会知识点
- 安卓udp发包工具_好装逼牌udp-tcp发包工具
- EXCEL 分组取前十的数据
- 进制转换简单实现代码
- 中国数学界为之骄傲--庞加莱猜想的完美证明
- linux 删除文件的最后一行
- 基于数字孪生的智慧城市
- Intel 12代处理器主机 安装Ubuntu
- adb绕过夜神模拟器锁屏密码
- 利用python对Excel进行读写操作
热门文章
- 利用计算机或图形计算器在,利用图形计算器编写趣味数字游戏
- 是不是从Java培训班出来的人都被淘汰了?
- python3.x,一个关于queue.task_done()与queue.join()的实验
- AB实验分析方法论 - matching
- 学习笔记(01):OmniPlan项目管理就该这样学-使用关联线连接任务
- USB协议基本概念及usbmon日志解析
- 2023仿微信聊天软件系统开发独立部署聊天系统
- 计算机专业小新pro14,联想小新pro14对比小新air15 2021款哪个值得买
- jquery仿网站客服
- 《python爬虫120例》教程导航帖(2022.5.7更新)