X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;fp=src%2Fcore%2FInformationManager.cxx;h=5a70dee6a54041951a4461723a85f40714caf518;hp=61daa3d269d094dc130ae80e82d51f3ac9871a89;hb=9b99fc5856d5fe88bb1d2aad4d2ee7cd86b5be57;hpb=3d7b4d3a5f6c17823bb79490256661ddb5e7ab83 diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 61daa3d..5a70dee 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -1,4 +1,5 @@ #include "InformationManager.hxx" +#include "bindings/Interpreter.hxx" #include "disassembler/llvm/LLVMDisassembler.hxx" #include "core/Function.hxx" #include "core/BasicBlock.hxx" @@ -16,6 +17,12 @@ InformationManager::InformationManager() : logger(log4cxx::Logger::getLogger("core.InformationManager")) { current_information_manager = this; + + QPluginLoader* loader = new QPluginLoader("libguilePlugin", NULL); + if (!loader->load()) + LOG4CXX_ERROR(logger, "Loading plugin failed: " << loader->errorString().toStdString()); + interpreters["GUILE"] = qobject_cast(loader->instance()); + plugins.push_back(loader); } InformationManager::~InformationManager() { @@ -24,6 +31,9 @@ InformationManager::~InformationManager() { for (auto f : functions) delete f.second; + + for (auto i : plugins) + delete i; } void InformationManager::reset(const std::string& filename) { @@ -154,6 +164,25 @@ std::map::const_iterator InformationManager::endBasicBloc } +/* ********************************* + * Accessors for the Interpreter map + */ + +Interpreter* InformationManager::getInterpreter(const std::string& name) { + auto it = interpreters.find(name); + if (it != interpreters.end()) + return it->second; + else + return NULL; +} + +std::map::const_iterator InformationManager::beginInterpreters() { + return interpreters.begin(); +} +std::map::const_iterator InformationManager::endInterpreters() { + return interpreters.end(); +} + /* ******************************** * Factory methods for data classes