X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fcore%2FInformationManager.cxx;h=711d47a552cb466b78b5c69a49d86e0d89ec9741;hp=73ea5ef1cda9bfdb61fda0fe59e807ed7d11d524;hb=cab6494b97d1626c7b9285b69df324d9c9953614;hpb=efaafdaf4a18b5f2f4dd743aa3f0e609d428b15a diff --git a/src/core/InformationManager.cxx b/src/core/InformationManager.cxx index 73ea5ef..711d47a 100644 --- a/src/core/InformationManager.cxx +++ b/src/core/InformationManager.cxx @@ -8,9 +8,15 @@ #include #include +#include + +InformationManager* current_information_manager; + InformationManager::InformationManager() - : logger(log4cxx::Logger::getLogger("InformationManager")) -{} + : logger(log4cxx::Logger::getLogger("core.InformationManager")) +{ + current_information_manager = this; +} InformationManager::~InformationManager() { for (auto b : blocks) @@ -27,8 +33,45 @@ void InformationManager::reset(const std::string& filename) { disassembler.get()->start(); } -void InformationManager::save(const QString& filename) { - QuaZip zip(filename); +void InformationManager::load(const std::string& filename) { + QuaZip zip(filename.c_str()); + QuaZipFile file(&zip); + QuaZipFileInfo info; + + zip.open(QuaZip::mdUnzip); + tmpfile.reset(new QTemporaryFile()); + + { + LOG4CXX_INFO(logger, "Loading binary from archive"); + zip.setCurrentFile("binary"); + tmpfile->open(); + file.open(QIODevice::ReadOnly); + QByteArray buffer; + while (!file.atEnd()) { + buffer = file.read(4096); + tmpfile->write(buffer); + } + tmpfile->flush(); + file.close(); + disassembler.reset(createLLVMDisassembler(tmpfile->fileName().toStdString(), this)); + } + + for (bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) { + zip.getCurrentFileInfo(&info); + file.open(QIODevice::ReadOnly); + + if(info.name != "binary") { + QXmlStreamReader reader(&file); + assert(QXmlStreamReader::StartDocument == reader.readNext()); + assert(QXmlStreamReader::StartElement == reader.readNext()); + Function * fun = Function::deserialize(reader, this); + } + file.close(); + } +} + +void InformationManager::save(const std::string& filename) { + QuaZip zip(filename.c_str()); zip.open(QuaZip::mdCreate); zip.setComment("FRIDA 0.0"); QuaZipFile outZipFile(&zip);