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&);
 
  361    static void initDiagnostics();
 
  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.
 
Sawyer::CommandLine::SwitchGroup commandLineSwitches(Settings &)
Define command-line switches.
 
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
 
Hash hash(const std::vector< Ptr > &)
Hash zero or more expressions.
 
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.