1 1.1 kamil //===- FuzzerUtil.h - Internal header for the Fuzzer Utils ------*- C++ -* ===// 2 1.1 kamil // 3 1.1 kamil // The LLVM Compiler Infrastructure 4 1.1 kamil // 5 1.1 kamil // This file is distributed under the University of Illinois Open Source 6 1.1 kamil // License. See LICENSE.TXT for details. 7 1.1 kamil // 8 1.1 kamil //===----------------------------------------------------------------------===// 9 1.1 kamil // Util functions. 10 1.1 kamil //===----------------------------------------------------------------------===// 11 1.1 kamil 12 1.1 kamil #ifndef LLVM_FUZZER_UTIL_H 13 1.1 kamil #define LLVM_FUZZER_UTIL_H 14 1.1 kamil 15 1.1 kamil #include "FuzzerDefs.h" 16 1.1 kamil #include "FuzzerCommand.h" 17 1.1 kamil 18 1.1 kamil namespace fuzzer { 19 1.1 kamil 20 1.1 kamil void PrintHexArray(const Unit &U, const char *PrintAfter = ""); 21 1.1 kamil 22 1.1 kamil void PrintHexArray(const uint8_t *Data, size_t Size, 23 1.1 kamil const char *PrintAfter = ""); 24 1.1 kamil 25 1.1 kamil void PrintASCII(const uint8_t *Data, size_t Size, const char *PrintAfter = ""); 26 1.1 kamil 27 1.1 kamil void PrintASCII(const Unit &U, const char *PrintAfter = ""); 28 1.1 kamil 29 1.1 kamil // Changes U to contain only ASCII (isprint+isspace) characters. 30 1.1 kamil // Returns true iff U has been changed. 31 1.1 kamil bool ToASCII(uint8_t *Data, size_t Size); 32 1.1 kamil 33 1.1 kamil bool IsASCII(const Unit &U); 34 1.1 kamil 35 1.1 kamil bool IsASCII(const uint8_t *Data, size_t Size); 36 1.1 kamil 37 1.1 kamil std::string Base64(const Unit &U); 38 1.1 kamil 39 1.1 kamil void PrintPC(const char *SymbolizedFMT, const char *FallbackFMT, uintptr_t PC); 40 1.1 kamil 41 1.1 kamil std::string DescribePC(const char *SymbolizedFMT, uintptr_t PC); 42 1.1 kamil 43 1.1 kamil void PrintStackTrace(); 44 1.1 kamil 45 1.1 kamil void PrintMemoryProfile(); 46 1.1 kamil 47 1.1 kamil unsigned NumberOfCpuCores(); 48 1.1 kamil 49 1.1 kamil // Platform specific functions. 50 1.1 kamil void SetSignalHandler(const FuzzingOptions& Options); 51 1.1 kamil 52 1.1 kamil void SleepSeconds(int Seconds); 53 1.1 kamil 54 1.1 kamil unsigned long GetPid(); 55 1.1 kamil 56 1.1 kamil size_t GetPeakRSSMb(); 57 1.1 kamil 58 1.1 kamil int ExecuteCommand(const Command &Cmd); 59 1.1 kamil 60 1.1 kamil FILE *OpenProcessPipe(const char *Command, const char *Mode); 61 1.1 kamil 62 1.1 kamil const void *SearchMemory(const void *haystack, size_t haystacklen, 63 1.1 kamil const void *needle, size_t needlelen); 64 1.1 kamil 65 1.1 kamil std::string CloneArgsWithoutX(const Vector<std::string> &Args, 66 1.1 kamil const char *X1, const char *X2); 67 1.1 kamil 68 1.1 kamil inline std::string CloneArgsWithoutX(const Vector<std::string> &Args, 69 1.1 kamil const char *X) { 70 1.1 kamil return CloneArgsWithoutX(Args, X, X); 71 1.1 kamil } 72 1.1 kamil 73 1.1 kamil inline std::pair<std::string, std::string> SplitBefore(std::string X, 74 1.1 kamil std::string S) { 75 1.1 kamil auto Pos = S.find(X); 76 1.1 kamil if (Pos == std::string::npos) 77 1.1 kamil return std::make_pair(S, ""); 78 1.1 kamil return std::make_pair(S.substr(0, Pos), S.substr(Pos)); 79 1.1 kamil } 80 1.1 kamil 81 1.1 kamil std::string DisassembleCmd(const std::string &FileName); 82 1.1 kamil 83 1.1 kamil std::string SearchRegexCmd(const std::string &Regex); 84 1.1 kamil 85 1.1 kamil size_t SimpleFastHash(const uint8_t *Data, size_t Size); 86 1.1 kamil 87 1.1 kamil inline uint32_t Log(uint32_t X) { return 32 - __builtin_clz(X) - 1; } 88 1.1 kamil 89 1.1 kamil } // namespace fuzzer 90 1.1 kamil 91 1.1 kamil #endif // LLVM_FUZZER_UTIL_H 92