OpenHarmony Fuzztest -- 模糊测试

Fuzz 介绍

  Fuzz测试(Fuzzing)是一种自动化的、随机的测试方法,通过向系统输入大量随机数据,尝试引发程序错误、崩溃或未定义的行为。Fuzz测试的主要目标是找出软件中的未知错误。

  Fuzz测试的基本流程如下:

  • 输入生成:首先,Fuzz测试工具生成一些随机的或者半随机的输入。这些输入可能是完全随机的,也可能是基于一些规则或模板的。

  • 输入执行:然后,Fuzz测试工具将这些输入送给被测试的软件或系统。这可能涉及到启动一个新的进程,或者调用一个函数,或者发送一个网络请求。

  • 结果监控:Fuzz测试工具监控被测试的软件或系统的行为,看是否出现了错误、崩溃或未定义的行为。这可能涉及到检查返回值,或者监控进程状态,或者分析日志。

  • 错误报告:如果Fuzz测试工具发现了问题,它会生成一个错误报告,包括输入数据和错误详情。

OpenHarmony Fuzz

  开源鸿蒙项目采用LibFuzzer作为项目Fuzz测试框架(即生成随机输入)。

  LibFuzzer是一个由LLVM项目提供的强大的fuzzing框架,它使用了一种称为覆盖引导的fuzzing技术。LibFuzzer通过将随机输入提供给程序,并监视程序的代码覆盖率来工作。如果新的输入导致了代码覆盖率的增加,那么这个输入就会被保存下来,用于生成未来的输入。

  例如,你可以创建一个LLVMFuzzerTestOneInput函数,这个函数接受一个指向输入数据的指针和一个表示数据大小的参数。如下所示:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
    /* Run your code on data */
    OHOS::NetManagerStandard::NetDiagGetSocketInfoFuzzTest(data, size);
    OHOS::NetManagerStandard::NetDiagGetRouteTableFuzzTest(data, size);
    OHOS::NetManagerStandard::NetDiagUpdateInterfaceConfigFuzzTest(data, size);
    OHOS::NetManagerStandard::NetDiagSetInterfaceActiveFuzzTest(data, size);
    OHOS::NetManagerStandard::NetDiagGetInterfaceConfigFuzzTest(data, size);
    OHOS::NetManagerStandard::NetDiagPingFuzzTest(data, size);
    return 0;
}

  这样,当你运行LibFuzzer时,它会自动生成一些随机的输入,然后调用LLVMFuzzerTestOneInput函数,LLVMFuzzerTestOneInput函数再调用你的测试函数,这样就完成了一次fuzz测试。

  extern “C” 是一个语言链接修饰符,用于指定函数按照 C 语言的链接规则进行编译和链接。在 C++ 中,函数默认使用 C++ 的链接规则,这意味着函数名称会经过名称修饰(name mangling)以支持函数重载和其他 C++ 特性。
  在给定的代码中,extern “C” 修饰符用于声明 LLVMFuzzerTestOneInput 函数,以确保它按照 C语言的链接规则进行编译和链接。这是因为该函数是用于模糊测试的回调函数,通常由模糊测试框架调用。模糊测试框架通常使用 C 语言编写,因此需要确保回调函数按照 C 语言的链接规则进行处理。
  通过使用 extern “C” 修饰符,可以确保函数名称不会经过名称修饰,从而使模糊测试框架能够正确地调用该函数。这样可以确保 C++代码与 C 代码进行正确的交互,并避免由于链接规则不匹配而导致的问题。

具体运行

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华为胡神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值