| //===- FuzzerUtil.h - Internal header for the Fuzzer Utils ------*- C++ -* ===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // Util functions. |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_FUZZER_UTIL_H |
| #define LLVM_FUZZER_UTIL_H |
| |
| #include "FuzzerDefs.h" |
| #include "FuzzerCommand.h" |
| |
| namespace fuzzer { |
| |
| void PrintHexArray(const Unit &U, const char *PrintAfter = ""); |
| |
| void PrintHexArray(const uint8_t *Data, size_t Size, |
| const char *PrintAfter = ""); |
| |
| void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = ""); |
| |
| void PrintASCII(const Unit &U, const char *PrintAfter = ""); |
| |
| // Changes U to contain only ASCII (isprint+isspace) characters. |
| // Returns true iff U has been changed. |
| bool ToASCII(uint8_t *Data, size_t Size); |
| |
| bool IsASCII(const Unit &U); |
| |
| bool IsASCII(const uint8_t *Data, size_t Size); |
| |
| std::string Base64(const Unit &U); |
| |
| void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC); |
| |
| std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC); |
| |
| void PrintStackTrace(); |
| |
| void PrintMemoryProfile(); |
| |
| unsigned NumberOfCpuCores(); |
| |
| // Platform specific functions. |
| void SetSignalHandler(const FuzzingOptions& Options); |
| |
| void SleepSeconds(int Seconds); |
| |
| unsigned long GetPid(); |
| |
| size_t GetPeakRSSMb(); |
| |
| int ExecuteCommand(const Command &Cmd); |
| |
| FILE *OpenProcessPipe(const char *Command, const char *Mode); |
| |
| const void *SearchMemory(const void *haystack, size_t haystacklen, |
| const void *needle, size_t needlelen); |
| |
| std::string CloneArgsWithoutX(const Vector<std::string> &Args, |
| const char *X1, const char *X2); |
| |
| inline std::string CloneArgsWithoutX(const Vector<std::string> &Args, |
| const char *X) { |
| return CloneArgsWithoutX(Args, X, X); |
| } |
| |
| inline std::pair<std::string, std::string> SplitBefore(std::string X, |
| std::string S) { |
| auto Pos = S.find(X); |
| if (Pos == std::string::npos) |
| return std::make_pair(S, ""); |
| return std::make_pair(S.substr(0, Pos), S.substr(Pos)); |
| } |
| |
| std::string DisassembleCmd(const std::string &FileName); |
| |
| std::string SearchRegexCmd(const std::string &Regex); |
| |
| size_t SimpleFastHash(const uint8_t *Data, size_t Size); |
| |
| inline uint32_t Log(uint32_t X) { return 32 - __builtin_clz(X) - 1; } |
| |
| } // namespace fuzzer |
| |
| #endif // LLVM_FUZZER_UTIL_H |