1 #ifndef ROSE_BinaryAnalysis_LibraryIdentification_H
2 #define ROSE_BinaryAnalysis_LibraryIdentification_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_LIBRARY_IDENTIFICATION
6 #include <Rose/BinaryAnalysis/Partitioner2/BasicTypes.h>
8 #include <Sawyer/Database.h>
9 #include <Sawyer/SharedObject.h>
10 #include <Sawyer/SharedPointer.h>
17 namespace BinaryAnalysis {
30 class LibraryIdentification {
48 std::vector<std::regex> includeRes;
56 boost::filesystem::path includeFile;
69 std::vector<std::regex> excludeRes;
77 boost::filesystem::path excludeFile;
83 size_t minFunctionInsns = 0;
91 bool identifyFunctionsByHash =
false;
107 std::string version_;
108 std::string architecture_;
110 std::string cversion_;
113 Library(
const std::string &hash,
const std::string &name,
const std::string &version,
const std::string &architecture,
114 time_t ctime,
const std::string &cversion);
122 static Ptr instance(
const std::string &hash,
const std::string &name,
const std::string &version,
123 const std::string &architecture);
130 static Ptr instance(
const std::string &hash,
const std::string &name,
const std::string &version,
131 const std::string &architecture, time_t creationTime,
const std::string &creationVersion);
138 const std::string&
hash()
const;
144 const std::string& name()
const;
149 const std::string& version()
const;
154 const std::string& architecture()
const;
160 time_t creationTime()
const;
166 const std::string& creationVersion()
const;
182 rose_addr_t address_;
184 std::string demangledName_;
187 Library::Ptr library_;
189 std::string cversion_;
192 Function(rose_addr_t address,
const std::string &name,
const std::string &demangledName,
const std::string &hash,
193 size_t nInsns, time_t ctime,
const std::string &cversion,
const Library::Ptr &library);
201 static Ptr instance(rose_addr_t address,
const std::string &name,
const std::string &demangledName,
202 const std::string &hash,
size_t nInsns,
const Library::Ptr &library);
209 static Ptr instance(rose_addr_t address,
const std::string &name,
const std::string &demangledName,
210 const std::string &hash,
size_t nInsns, time_t creationTime,
const std::string &creationVersion,
211 const Library::Ptr &library);
217 rose_addr_t address()
const;
222 const std::string& name()
const;
231 const std::string&
hash()
const;
234 size_t nInsns()
const;
237 Library::Ptr library()
const;
240 time_t creationTime()
const;
243 const std::string& creationVersion()
const;
253 std::string databaseUrl_;
254 Sawyer::Database::Connection db_;
257 boost::filesystem::path cachedIncludeFile_;
259 boost::filesystem::path cachedExcludeFile_;
263 LibraryCache libraryCache_;
290 void connect(
const std::string &databaseUrl);
296 void createDatabase(
const std::string &databaseUrl);
310 bool insertFunction(
const Function::Ptr&);
328 Library::Ptr library(
const std::string &hash);
333 std::vector<Library::Ptr> libraries();
342 std::vector<Function::Ptr> functions();
343 std::vector<Function::Ptr> functions(
const Library::Ptr&);
377 void upgradeDatabase();
380 void createLibrary(
const Library::Ptr&);
385 void createFunction(
const Function::Ptr&);
389 bool isIncluded(
const Function::Ptr&);
393 bool isExcluded(
const Function::Ptr&);
398 bool isConsidered(
const Function::Ptr&);
403 void cacheNamesFromFile(
const boost::filesystem::path &fileName, boost::filesystem::path &cachedFileName ,
407 std::vector<Function::Ptr> functions(Sawyer::Database::Statement);
std::string demangledName(std::string)
Compute demangled version of mangled name.
Sawyer::CommandLine::SwitchGroup commandLineSwitches(Settings &settings)
Command-line switches for unparser settings.
ROSE_DLL_API Sawyer::Message::Facility mlog
Diagnostic facility for the ROSE library as a whole.
A collection of related switch declarations.
Settings settings
Command-line settings for the rosebud tool.
Main namespace for the ROSE library.
Reference-counting intrusive smart pointer.
Sawyer::SharedPointer< Function > FunctionPtr
Shared-ownership pointer for Function.
Sawyer::SharedPointer< const Partitioner > PartitionerConstPtr
Shared-ownership pointer for Partitioner.
Base class for reference counted objects.
void initDiagnostics()
Initialize diagnostics.
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
Container associating values with keys.
Hash hash(const std::vector< Ptr > &)
Hash zero or more expressions.