X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fmain.cxx;h=24ddf7a2ad24aca695601d0d6b8d0906b4a5350e;hp=14dc0cb2d82bdd2a9820cfdeaf6ba71cb8a03f78;hb=c81c0d3dba088b302187d7862a62ca88d2306e24;hpb=9b491d88e22891dca6c2d54dda50721239d250db diff --git a/src/main.cxx b/src/main.cxx index 14dc0cb..24ddf7a 100644 --- a/src/main.cxx +++ b/src/main.cxx @@ -1,43 +1,91 @@ -#include "include_llvm.hxx" +#include "disassembler/llvm/include_llvm.hxx" -#include #include #include +#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0) +#define ARGPARSE +#endif + +#ifdef ARGPARSE #include +#endif #include #include "log4cxx/logger.h" #include "log4cxx/basicconfigurator.h" -#include "Binary.hxx" #include "gui/Mainwindow.hxx" - -using std::cout; -using std::cin; -using std::cerr; +#include "core/InformationManager.hxx" +#include "disassembler/llvm/LLVMDisassembler.hxx" +#include "Config.hxx" int main(int argc, char** argv) { - log4cxx::BasicConfigurator::configure(); - log4cxx::LoggerPtr _logger(log4cxx::Logger::getLogger("main")); + QApplication app(argc, argv); - LOG4CXX_DEBUG(_logger, "Initializing LLVM"); - llvm::InitializeAllTargetInfos(); - llvm::InitializeAllTargetMCs(); - llvm::InitializeAllAsmParsers(); - llvm::InitializeAllDisassemblers(); + log4cxx::BasicConfigurator::configure(); + log4cxx::LoggerPtr _logger(log4cxx::Logger::getLogger("main")); - LOG4CXX_DEBUG(_logger, "Initializing Qt"); - QApplication app(argc, argv); +#ifdef ARGPARSE QCommandLineParser parser; +#endif QApplication::setApplicationName("frida"); + QApplication::setApplicationVersion("0.0"); + QApplication::addLibraryPath(CONFIG_LIBDIR "/frida/plugins/Interpreter"); +#ifdef ARGPARSE parser.addHelpOption(); + parser.addVersionOption(); + + QCommandLineOption loglevelOption("loglevel", "Control verbosity of logging", "FATAL|ERROR|WARN|INFO|DEBUG|TRACE"); + loglevelOption.setDefaultValue("INFO"); + parser.addOption(loglevelOption); + + parser.addPositionalArgument("filename", QCoreApplication::translate("main", "File to disassemble.")); + parser.process(app); +#endif + + log4cxx::LevelPtr level = log4cxx::Level::getInfo(); +#ifdef ARGPARSE + if (parser.value(loglevelOption) != "") { + std::string levelstring = parser.value(loglevelOption).toStdString(); + if (levelstring == "FATAL") + level = log4cxx::Level::getFatal(); + if (levelstring == "ERROR") + level = log4cxx::Level::getError(); + if (levelstring == "WARN") + level = log4cxx::Level::getWarn(); + if (levelstring == "INFO") + level = log4cxx::Level::getInfo(); + if (levelstring == "DEBUG") + level = log4cxx::Level::getDebug(); + if (levelstring == "TRACE") + level = log4cxx::Level::getTrace(); + } +#endif + log4cxx::Logger::getRootLogger()->setLevel(level); + + InformationManager iman; + + LOG4CXX_DEBUG(_logger, "Initializing LLVM"); + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllTargetMCs(); + llvm::InitializeAllAsmParsers(); + llvm::InitializeAllDisassemblers(); + + LOG4CXX_DEBUG(_logger, "Initializing Qt"); - Mainwindow m; - m.show(); + std::string filename = ""; +#ifdef ARGPARSE + if (! parser.positionalArguments().isEmpty()) { + filename = parser.positionalArguments().at(0).toStdString(); + } +#endif - return app.exec(); + Mainwindow m(&iman); + m.show(); + iman.reset(filename); + return app.exec(); }