当前位置: 首页 > news >正文

中建西部建设西南有限公司网站游戏合作渠道

中建西部建设西南有限公司网站,游戏合作渠道,做理财网站,南庄网站建设fuzz测试之libfuzzer使用小结背景基本原理使用方法主调DEMO参考资料背景 项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试。fuzz测试是一种模糊测试方法,本质是通过灌入各种变异的随机数据,去遍历不同函数分支&#xf…

fuzz测试之libfuzzer使用小结

    • 背景
    • 基本原理
    • 使用方法
    • 主调DEMO
    • 参考资料

背景


项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试。fuzz测试是一种模糊测试方法,本质是通过灌入各种变异的随机数据,去遍历不同函数分支,以暴露程序中可能出现的问题。

*

接下来,本文以安卓平台LLVM自带的libFuzzer工具使用为例,简单介绍其使用方法。

基本原理


在学习使用之前,先了解其基本运行原理。LLVM中首先调用一次初始化接口LLVMFuzzerInitialize设定参数,然后通过反复调用接口LLVMFuzzerTestOneInput,不断灌入不同长度的随机数据,直到程序达到最大运行限制,或中途找到bug才中断退出。

使用方法


所需环境

  • 电脑硬件
    • NDK编译软件,使用NDK-R20及以上的版本,其clang编译器自带地址消毒和fuzz测试模块
    • adb软件,用于电脑与手机联调
  • 安卓手机(可使用开发者人员选项)

所需文件

  • CPP主调:
    • xx_fuzz.cc
  • 编译脚本:
    • andriod.mk
    • application.mk
  • 待测试算法源码
    • xx.c

基本流程

  • 电脑用NDK编译源文件,生成可执行文件
    • andriod.mk中添加
      • 编译选项:LOCAL_CFLAGS += -fsanitize=fuzzer,address -fomit-frame-pointer
      • 链接选项:LOCAL_LDFLAGS += -fsanitize=fuzzer,address
      • address选项是打开asan地址消毒功能,可增强找bug能力
    • application.mk中添加
      • 标准库:APP_STL := c++_shared
      • 因为调度代码是用CPP写的,需用到STL库
    • 打开powershell,在mk文件所在目录下,通过ndk-build指令,编译可执行文件
  • 通过ADB软件push推到手机文件夹内
    • 拷贝上一步骤生成的可执行文件和动态库文件(如:libclang_rt.asan-aarch64-android.solibc++_shared.so
    • 将之推到手机内,如/data/local/tmp/xx_fuzz/
      • 指令举例:adb push xx.so /data/local/tmp/xx_fuzz/
  • 通过ADB输入相关指令在手机上启动运行程序
    • 电脑连接安卓手机,手机进入开发者模式
    • 电脑命令窗,输入adb shell,进入手机环境
    • 切到可执行文件对应目录,输入以下指令,运行程序
      • LD_LIBRARY_PATH=./ ./demo_exe -max_len=65535 -len_control=0 -artifact_prefix=./corpus/ -detect_leaks=0 ./corpus
  • 解析报错日志
    • 根据手机环境反馈的错误信息,如偏移地址0x226534
    • 将ndk自带的llvm-symbolizer.exe所在目录添加到电脑环境变量的path中
    • 命令窗输入以下指令,解析报错相关代码上下文,分析算法,修复bug
      • 指令:llvm-symbolizer -e=demo_exe 0x226534 --print-source-context-lines=3
      • 模式:llvm-symbolizer -e=库名或EXE名 报错显示的偏移地址
  • 重点步骤
    • 打开fuzz测试的编译选项,并编译成功
    • LLVMFuzzerInitialize/LLVMFuzzerTestOneInput主调代码编写
  • 注意事项
    • 主调demo中不用写main函数,main由libfuzzer框架提供
    • c和cpp代码联合编译时,需用宏区分函数命名

具体MK文件编译脚本说明,见《NDK编译系列:构建C/CPP工程》。

主调DEMO


上面流程中用到的主调xx_fuzz.cc里的两个接口函数,框架模板如下:

#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>#ifdef __cplusplus
extern "C" {
#endifint LLVMFuzzerInitialize(int argc, char **argv)
{// write your codereturn 0;
}int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
{// write your codereturn 0;
}#ifdef __cplusplus
}
#endif

进一步的,具体使用可以参考:libfuzzer从入门到放弃。

参考资料


  1. llvm-libfuzzer官方介绍
  2. 入门libFuzzer——编译链接
  3. libFuzzer使用总结教程
  4. libFuzzer学习
  5. Android NDK Address Sanitizer地址消毒ASAN
  6. aac的fuzzer测试工程
http://www.yidumall.com/news/7181.html

相关文章:

  • 做网站找模板搜索引擎营销的特点有
  • 新云手机站官网百度搜索引擎属于什么引擎
  • 做网站如何月入10万百度一下就知道了官网榡
  • 网站的首页怎么做的企业推广策划书
  • 多品牌网站建设福州seo服务
  • 扶余网站建设seo优化搜索推广
  • 做网站需服务器吗微商软文
  • 网上做物理题赚钱的网站网时代教育培训机构怎么样
  • 成都动力无限科技有限公司做网站目前最流行的拓客方法
  • 网站被做跳转怎么办销售网络平台
  • 做数学网站百度官网电话客服24小时
  • 承德公司做网站成品人和精品人的区别在哪
  • 第三方商城网站开发新冠疫情最新消息
  • 临淄网站制作首选公司南京seo排名扣费
  • wordpress 移动建站baud百度一下
  • 花店网站建设的工作流程站群seo
  • 网站建设福州最好网站收录查询
  • 弄几个的网站网络营销的八大能力
  • 内部卷网站怎么做的中国网站访问量排行
  • 常州工厂网站建设重庆网站推广
  • 个人博客网站怎么做网站开发月薪多少钱
  • 企业做网站etp和源程序怎样做百度推广网页
  • 做网站项目后台的好的竞价账户托管外包
  • 福州疫情最新消息今天封城了武汉seo优化代理
  • 网站如果实现微信支付吗哪个公司的网站制作
  • 网站的注册和登录界面怎么做seo建站需求
  • 做网站后台用什么语言好网上营销网站
  • 网站建设 部署与发布 答案百度app优化
  • 网站前端建设都需要什么问题新软件推广
  • 邢台哪里做网站网络推广是指什么