首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >clang的libFuzzer可以在同一个二进制文件中测试多个API吗?

clang的libFuzzer可以在同一个二进制文件中测试多个API吗?
EN

Stack Overflow用户
提问于 2018-10-21 02:29:31
回答 1查看 147关注 0票数 0

libFuzzer's documentation给出了一个如何模糊应用程序接口的示例:

代码语言:javascript
运行
复制
#include <stdint.h>
#include <stddef.h>

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  if (size > 0 && data[0] == 'H')
    if (size > 1 && data[1] == 'I')
       if (size > 2 && data[2] == '!')
       __builtin_trap();
  return 0;
}

我有接受不同c++类型的单个实例的API。我通过以下方式进行测试:

代码语言:javascript
运行
复制
#include <stdint.h>
#include <stddef.h>
#include "my_api.hh"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  auto t = safe_deserialize<MyType>(data,size);
  my_api(t); 
  return 0;
}

问题是,如果我想测试10个API,我需要创建10个独立的二进制文件。我想要一个更类似于一组单元测试的二进制文件。如下所示:

代码语言:javascript
运行
复制
#include <stdint.h>
#include <stddef.h>
#include "my_api.hh"

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  auto t = safe_deserialize<MyType_1>(data,size);
  my_api_1(t); 
  return 0;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  auto t = safe_deserialize<MyType_2>(data,size);
  my_api_2(t); 
  return 0;
}

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  auto t = safe_deserialize<MyType_3>(data,size);
  my_api_3(t); 
  return 0;
}

这不起作用,因为您不能有重复的LLVMFuzzerTestOneInput实例。

有没有办法使用Clang的libFuzzer工具,在同一个二进制文件中测试多个API?

我想我可以创建某种通用函数来分派到所有其他API,但这是不可取的,因为那样我就需要构建一个语料库,它实际上是一个不相关语料库的集合,崩溃结果将在各种API中混合在一起。

EN

回答 1

Stack Overflow用户

发布于 2019-09-23 00:06:10

怎么样?你可以试试这个。不确定,它能不能工作。

代码语言:javascript
运行
复制
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
      auto t1 = safe_deserialize<MyType_1>(data,size);
      auto t3 = safe_deserialize<MyType_2>(data,size);
      auto t3 = safe_deserialize<MyType_3>(data,size);

      my_api_1(t1); 
      my_api_2(t2); 
      my_api_3(t3); 
      return 0;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52908838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档