ROSE  0.11.145.0
LibraryInfo.h
1 #ifndef LIBRARY_INFO_H
2 #define LIBRARY_INFO_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_LIBRARY_IDENTIFICATION
5 
6 #include <Rose/BinaryAnalysis/AstHash.h>
7 #include <time.h>
8 #include "Combinatorics.h"
9 
10 // Deprecated [Robb Matzke 2022-01-20]
11 namespace LibraryIdentification {
12 
13 const std::string unknownLibraryName = "UNKNOWN";
14 const std::string multiLibraryName = "MULTIPLE_LIBS";
15 
16 // Deprecated [Robb Matzke 2022-01-20]
17 class LibraryInfo {
18 public:
19  // Constructor.
20  //
21  // Combines all the information required to identify a library. This constructor allows the user to define
22  // everything.
23  //
24  // @param[in] libName Name of the library to add.
25  // @param[in] libVersion Version of the library. Please use Fowler-Noll-Vo HasherFnv class in Combinatorics.h.
26  // @param[in] libHash Unique Hash of the library to add. Please use Fowler-Noll-Vo HasherFnv class in Combinatorics.h.
27  // @param[in] architecture architecture library was built for.
28  LibraryInfo(const std::string& libName, const std::string& libVersion, const std::string& libHash,
29  const std::string& architecture)
30  : libName(libName), libVersion(libVersion), libHash(libHash), architecture(architecture) {
31  analysisTime = time(NULL);
32  }
33 
34  // Constructor.
35  //
36  // Only takes the hash, Rest to be filled in from matching in the database.
37  //
38  // @param[in] libHash Unique Hash of the library to add
39  LibraryInfo(const std::string& libHash)
40  : libName(unknownLibraryName), libVersion(unknownLibraryName), libHash(libHash), architecture(unknownLibraryName) {}
41 
42  // True if the hashes are in ascending order.
43  //
44  // Lessthan operator for sorting and recognizing duplicates.
45  friend bool operator<(const LibraryInfo& lhs,const LibraryInfo& rhs) {
46  return lhs.libHash < rhs.libHash;
47  }
48 
49  // Factory for "Unknown Library" instance.
50  //
51  // Constructs and returns the special sentinal "Unknown Library" instance for functions that couldn't be identified.
52  static LibraryInfo getUnknownLibraryInfo() {
53  return LibraryInfo(unknownLibraryName, unknownLibraryName, unknownLibraryName, unknownLibraryName);
54  }
55 
56  // Factory for "Multi Library" instance.
57  //
58  // Constructs and returns the special sentinal "Multi Library" instance for functions that couldn't be uniquely
59  // identified. ie, a function with this hash appears in multiple libraries (probably with multiple names).
60  static LibraryInfo getMultiLibraryInfo() {
61  return LibraryInfo(multiLibraryName, multiLibraryName, multiLibraryName, multiLibraryName);
62  }
63 
64  // Human readable libary identifier
65  std::string toString() {
66  return libName + "." + libVersion;
67  }
68 
69  // The name of the library.
70  std::string libName;
71 
72  // The version of the library.
73  std::string libVersion;
74 
75  // A hash that should uniquely identify the library.
76  std::string libHash;
77 
78  // Instruction set for which library was built.
79  std::string architecture;
80 
81  // The time when this library was processed.
82  time_t analysisTime;
83 };
84 
85 } // namespace
86 
87 #endif
88 #endif
ROSE_UTIL_API std::string toString(const Path &)
Convert a path to a string.