X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;h=294dc2f53583b7e3a9c5ce6b8f33fd49427bf058;hp=7c1c5dee207a4e9e1023a812858fec5e8ea67a9b;hb=0daf9a157f3d41690cf4a0287db1adecc4ad0b71;hpb=32e87746db981882b95aceddde79ef12034a3405 diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 7c1c5de..294dc2f 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -2,11 +2,20 @@ #include "disassembler/llvm/LLVMDisassembler.hxx" #include "core/Function.hxx" #include "core/BasicBlock.hxx" +#include "core/Comment.hxx" #include "gui/qt.hxx" #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)); if (disassembler.get() != NULL) @@ -19,7 +28,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); @@ -50,3 +60,70 @@ void InformationManager::save(const QString& filename) { zip.close(); } + +void InformationManager::signal_new_function(Function* fun) { +} + +Function* InformationManager::getFunction(uint64_t address) { + auto it = functions.find(address); + if (it != functions.end()) + return it->second; + else + return NULL; +} + +BasicBlock* InformationManager::getBasicBlock(uint64_t address) { + auto it = blocks.find(address); + if (it != blocks.end()) + return it->second; + else + return NULL; +} + +Function* InformationManager::newFunction(uint64_t address) { + Function* fun = new Function(address, this); + functions.insert(std::make_pair(address, fun)); + return fun; +} + +BasicBlock* InformationManager::newBasicBlock(uint64_t address) { + BasicBlock* block = new BasicBlock(address, this); + blocks.insert(std::make_pair(address, block)); + return block; +} + +Comment* InformationManager::newGlobalComment(uint64_t address) { + return NULL; +} + +Comment* InformationManager::newLocalComment(uint64_t address, Function* f) { + return NULL; +} + +void InformationManager::finishFunction(Function* fun) { + for (auto b : fun->blocks()) { + BasicBlock* bl = b.second; + blocks.insert(std::make_pair(bl->getStartAddress(), bl)); + } + new_function_signal(fun); +} + +void InformationManager::finishBasicBlock(BasicBlock* b) { +} + +void InformationManager::finnishComment(Comment* c) { +} + +void InformationManager::deleteFunction(Function* f) { + functions.erase(f->getStartAddress()); + delete f; +} + +void InformationManager::deleteBasicBlock(BasicBlock* b) { + blocks.erase(b->getStartAddress()); + delete b; +} + +void InformationManager::deleteComment(Comment* c) { + delete c; +}