2018-06-06 09:23:29 +08:00
|
|
|
//===- FuzzerDataFlowTrace.h - Internal header for the Fuzzer ---*- C++ -* ===//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2018-06-06 09:23:29 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// fuzzer::DataFlowTrace; reads and handles a data-flow trace.
|
|
|
|
//
|
|
|
|
// A data flow trace is generated by e.g. dataflow/DataFlow.cpp
|
|
|
|
// and is stored on disk in a separate directory.
|
|
|
|
//
|
|
|
|
// The trace dir contains a file 'functions.txt' which lists function names,
|
|
|
|
// oner per line, e.g.
|
|
|
|
// ==> functions.txt <==
|
|
|
|
// Func2
|
|
|
|
// LLVMFuzzerTestOneInput
|
|
|
|
// Func1
|
|
|
|
//
|
|
|
|
// All other files in the dir are the traces, see dataflow/DataFlow.cpp.
|
|
|
|
// The name of the file is sha1 of the input used to generate the trace.
|
|
|
|
//
|
|
|
|
// Current status:
|
|
|
|
// the data is parsed and the summary is printed, but the data is not yet
|
|
|
|
// used in any other way.
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#ifndef LLVM_FUZZER_DATA_FLOW_TRACE
|
|
|
|
#define LLVM_FUZZER_DATA_FLOW_TRACE
|
|
|
|
|
|
|
|
#include "FuzzerDefs.h"
|
|
|
|
|
2018-06-07 09:40:20 +08:00
|
|
|
#include <unordered_map>
|
|
|
|
#include <vector>
|
|
|
|
#include <string>
|
|
|
|
|
2018-06-06 09:23:29 +08:00
|
|
|
namespace fuzzer {
|
2018-06-07 09:40:20 +08:00
|
|
|
class DataFlowTrace {
|
|
|
|
public:
|
2018-06-06 09:23:29 +08:00
|
|
|
void Init(const std::string &DirPath, const std::string &FocusFunction);
|
2018-06-07 09:40:20 +08:00
|
|
|
void Clear() { Traces.clear(); }
|
2018-07-19 09:23:32 +08:00
|
|
|
const Vector<uint8_t> *Get(const std::string &InputSha1) const {
|
2018-06-07 09:40:20 +08:00
|
|
|
auto It = Traces.find(InputSha1);
|
|
|
|
if (It != Traces.end())
|
|
|
|
return &It->second;
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Input's sha1 => DFT for the FocusFunction.
|
2018-07-19 09:23:32 +08:00
|
|
|
std::unordered_map<std::string, Vector<uint8_t> > Traces;
|
2018-06-06 09:23:29 +08:00
|
|
|
};
|
|
|
|
} // namespace fuzzer
|
|
|
|
|
|
|
|
#endif // LLVM_FUZZER_DATA_FLOW_TRACE
|