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/CommandLine.h>
9#include <Sawyer/Database.h>
10#include <Sawyer/Message.h>
11#include <Sawyer/SharedObject.h>
12#include <Sawyer/SharedPointer.h>
20namespace BinaryAnalysis {
33class LibraryIdentification {
51 std::vector<std::regex> includeRes;
59 boost::filesystem::path includeFile;
72 std::vector<std::regex> excludeRes;
80 boost::filesystem::path excludeFile;
86 size_t minFunctionInsns = 0;
97 bool identifyFunctionsByHash =
false;
113 std::string version_;
114 std::string architecture_;
116 std::string cversion_;
119 Library(
const std::string &hash,
const std::string &name,
const std::string &version,
const std::string &architecture,
120 time_t ctime,
const std::string &cversion);
128 static Ptr instance(
const std::string &hash,
const std::string &name,
const std::string &version,
129 const std::string &architecture);
136 static Ptr instance(
const std::string &hash,
const std::string &name,
const std::string &version,
137 const std::string &architecture, time_t creationTime,
const std::string &creationVersion);
144 const std::string&
hash()
const;
150 const std::string& name()
const;
155 const std::string& version()
const;
160 const std::string& architecture()
const;
166 time_t creationTime()
const;
172 const std::string& creationVersion()
const;
190 std::string demangledName_;
193 Library::Ptr library_;
195 std::string cversion_;
198 Function(Address address,
const std::string &name,
const std::string &demangledName,
const std::string &hash,
size_t nInsns,
199 time_t ctime,
const std::string &cversion,
const Library::Ptr &library);
207 static Ptr instance(Address address,
const std::string &name,
const std::string &demangledName,
const std::string &hash,
208 size_t nInsns,
const Library::Ptr &library);
215 static Ptr instance(Address address,
const std::string &name,
const std::string &demangledName,
const std::string &hash,
216 size_t nInsns, time_t creationTime,
const std::string &creationVersion,
const Library::Ptr &library);
227 const std::string& name()
const;
236 const std::string&
hash()
const;
239 size_t nInsns()
const;
242 Library::Ptr library()
const;
245 time_t creationTime()
const;
248 const std::string& creationVersion()
const;
258 std::string databaseUrl_;
259 Sawyer::Database::Connection db_;
262 boost::filesystem::path cachedIncludeFile_;
264 boost::filesystem::path cachedExcludeFile_;
268 LibraryCache libraryCache_;
295 void connect(
const std::string &databaseUrl);
301 void createDatabase(
const std::string &databaseUrl);
314 Function::Ptr insertFunction(
const Library::Ptr&,
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&);
315 bool insertFunction(
const Function::Ptr&);
324 size_t insertLibrary(
const Library::Ptr&,
const Partitioner2::PartitionerConstPtr&);
333 Library::Ptr library(
const std::string &hash);
338 std::vector<Library::Ptr> libraries();
347 std::vector<Function::Ptr> functions();
348 std::vector<Function::Ptr> functions(
const Library::Ptr&);
352 std::vector<Function::Ptr> search(
const Partitioner2::PartitionerConstPtr &partitioner,
const Partitioner2::FunctionPtr&);
366 std::string
hash(
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&)
const;
369 static size_t nInsns(
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&);
382 void upgradeDatabase();
385 void createLibrary(
const Library::Ptr&);
390 void createFunction(
const Function::Ptr&);
394 bool isIncluded(
const Function::Ptr&);
395 bool isIncluded(
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&);
398 bool isExcluded(
const Function::Ptr&);
399 bool isExcluded(
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&);
403 bool isConsidered(
const Function::Ptr&);
404 bool isConsidered(
const Partitioner2::PartitionerConstPtr&,
const Partitioner2::FunctionPtr&);
408 void cacheNamesFromFile(
const boost::filesystem::path &fileName, boost::filesystem::path &cachedFileName ,
412 std::vector<Function::Ptr> functions(Sawyer::Database::Statement);
A collection of related switch declarations.
Container associating values with keys.
Holds a value or nothing.
Base class for reference counted objects.
Reference-counting intrusive smart pointer.
void initDiagnostics()
Initialize diagnostics.
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
Hash hash(const std::vector< Ptr > &)
Hash zero or more expressions.
Sawyer::CommandLine::SwitchGroup commandLineSwitches(Settings &settings)
Command-line switches for unparser settings.
std::uint64_t Address
Address.
ROSE_DLL_API Sawyer::Message::Facility mlog
Diagnostic facility for the ROSE library as a whole.
std::string demangledName(std::string)
Compute demangled version of mangled name.
Settings settings
Command-line settings for the rosebud tool.