X-Git-Url: https://git.siccegge.de//index.cgi?a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;h=a274c418091e40efcab87f1f29821cb67ab3c5f9;hb=1c0f4550bed81773ad34d190508bd49616264a38;hp=0907cf9d2d7f7eeb5a191781c4345e1fc3e5a72c;hpb=64cdefa8eebaedef3a852b061d4df431b7e6c654;p=frida%2Ffrida.git diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 0907cf9..a274c41 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -1,8 +1,19 @@ #include "InformationManager.hxx" #include "disassembler/llvm/LLVMDisassembler.hxx" +#include "core/Function.hxx" +#include "core/BasicBlock.hxx" + #include "gui/qt.hxx" -#include "quazip/quazip.h" -#include "quazip/quazipfile.h" +#include +#include + +InformationManager::~InformationManager() { + for (auto b : blocks) + delete b.second; + + for (auto f : functions) + delete f.second; +} void InformationManager::reset(const std::string& filename) { disassembler.reset(createLLVMDisassembler(filename, this)); @@ -16,7 +27,8 @@ void InformationManager::save(const QString& filename) { zip.setComment("FRIDA 0.0"); QuaZipFile outZipFile(&zip); - for (Function* fun : functions) { + for (auto funpair : functions) { + Function* fun = funpair.second; QuaZipNewInfo zipinfo(fun->getName().c_str()); zipinfo.setPermissions(static_cast(0x6444)); outZipFile.open(QIODevice::WriteOnly, zipinfo); @@ -47,3 +59,12 @@ void InformationManager::save(const QString& filename) { zip.close(); } + +void InformationManager::signal_new_function(Function* fun) { + functions.insert(std::make_pair(fun->getStartAddress(), fun)); + for (auto b : fun->blocks()) { + BasicBlock* bl = b.second; + blocks.insert(std::make_pair(bl->getStartAddress(), bl)); + } + new_function_signal(fun); +}