]> git.siccegge.de Git - frida/frida.git/blobdiff - src/gui/Mainwindow.cxx
Use -Wextra and be -Wextra-clean
[frida/frida.git] / src / gui / Mainwindow.cxx
index 03910a1be4801334ade968cbb237f6cd8cfe4d46..0c08892642dd760b4f5e611254e9c8c67de2467e 100644 (file)
@@ -1,8 +1,12 @@
 #include "Mainwindow.hxx"
 #include "qt.hxx"
 #include "disassembler/llvm/LLVMDisassembler.hxx"
-
+#include "core/Function.hxx"
+#include "core/BasicBlock.hxx"
+#include "core/InformationManager.hxx"
+#include "widgets/ScriptingDock.hxx"
 #include "widgets/CFGScene.hxx"
+#include "widgets/FunctionWidget.hxx"
 #include "dialogs/NewFunctionDialog.hxx"
 #include "dialogs/SimpleStringDialog.hxx"
 
@@ -10,8 +14,8 @@
 
 namespace {
        BasicBlockWidget *
-       local__add_basic_block(BasicBlock * block, Disassembler * dis,
-                              Mainwindow * mainwindow,
+       local__add_basic_block(BasicBlock * block, 
+                              Mainwindow * mainwindow, InformationManager * manager,
                               std::map<uint64_t, BasicBlockWidget*>& known_blocks,
                               CFGScene * scene, uint64_t starty, uint64_t startx);
 }
@@ -73,7 +77,7 @@ void Mainwindow::setGlobalHotkeys() {
        shortcut = new QShortcut(QKeySequence("r"), listWidget);
        connect(shortcut, &QShortcut::activated, [=]() {
                        QListWidgetItem * item = listWidget->currentItem();
-                       if (item) renameFunction(item);
+                       if (item) renameFunction(objects_list[item]->getFunction());
                });
 }
 
@@ -112,7 +116,7 @@ void Mainwindow::switchMainPlaneToAddress(uint64_t address) {
        }
 }
 
-void Mainwindow::switchMainPlane(int index) {
+void Mainwindow::switchMainPlane(int) {
        stackedWidget->setCurrentWidget(objects_list[listWidget->currentItem()]);
 }
 
@@ -121,7 +125,7 @@ void Mainwindow::showListContextMenu(const QPoint& point) {
        QMenu menu(this);
        if (item) {
                QAction * act = menu.addAction("Rename Function");
-               connect(act, &QAction::triggered, [=]() {this->renameFunction(item);});
+               connect(act, &QAction::triggered, [=]() {this->renameFunction(objects_list[item]->getFunction());});
        } else {
                QAction * act = menu.addAction("AddFunction");
                connect(act, SIGNAL(triggered()), this, SLOT(requestNewFunction()));
@@ -145,31 +149,31 @@ void Mainwindow::requestNewFunctionByAddress(uint64_t address) {
        switchMainPlaneToAddress(address);
 }
 
-void Mainwindow::renameFunction(QListWidgetItem * item) {
+void Mainwindow::renameFunction(Function* function) {
        SimpleStringDialog dialog("New name");
        int result = dialog.exec();
        if (QDialog::Accepted == result) {
-               LOG4CXX_DEBUG(logger, "renaming Function " << item->text().toStdString()
+               LOG4CXX_DEBUG(logger, "renaming Function " << function->getName()
                              << " to " << dialog.result().toStdString());
-               item->setText(dialog.result());
+               function->setName(dialog.result().toStdString());
+               objects_list_by_address[function->getStartAddress()]->setText(dialog.result());
        } else {
                LOG4CXX_DEBUG(logger, "renameFunction aborted");
        }
 }
 
 void Mainwindow::addFunction(Function* fun) {
-       if (functions.find(fun) != functions.end())
+       if (functions.find(fun->getStartAddress()) != functions.end())
                return;
 
-       functions.insert(fun);
+       functions.insert(std::make_pair(fun->getStartAddress(), fun));
 
-       QTabWidget * w = new QTabWidget();
+       FunctionWidget * w = new FunctionWidget(fun);
 
        // CFG
        CFGScene * scene = new CFGScene;
 
-       Disassembler * dis = manager->getDisassembler();
-       BasicBlock * block = dis->getBasicBlock(fun->getStartAddress());
+       BasicBlock * block = manager->getBasicBlock(fun->getStartAddress());
 
        uint64_t start_address(std::numeric_limits<uint64_t>::max());
        for (auto b : fun->blocks()) {
@@ -177,8 +181,8 @@ void Mainwindow::addFunction(Function* fun) {
                        start_address = b.first;
        }
 
-       local__add_basic_block(block, manager->getDisassembler(), this,
-                              blocks, scene, start_address, 100);
+       local__add_basic_block(block, this,
+                              manager, blocks, scene, start_address, 100);
 
        QGraphicsView * view = new QGraphicsView(scene);
        w->addTab(view, "CFG");
@@ -200,8 +204,8 @@ void Mainwindow::addFunction(Function* fun) {
 
 namespace {
        BasicBlockWidget *
-       local__add_basic_block(BasicBlock * block, Disassembler * dis,
-                              Mainwindow * mainwindow,
+       local__add_basic_block(BasicBlock * block,
+                              Mainwindow * mainwindow, InformationManager * manager,
                               std::map<uint64_t, BasicBlockWidget*>& known_blocks,
                               CFGScene * scene, uint64_t starty, uint64_t startx) {
 
@@ -221,16 +225,17 @@ namespace {
                widget->setFlag(QGraphicsItem::ItemIsMovable, true);
                widget->moveBy(100*startx, block->getStartAddress() - starty);
 
-               dis->printEachInstruction(block->getStartAddress(),
-                                         block->getEndAddress(),
-                                         [&](uint8_t* bytes,
-                                             size_t byte_count,
-                                             const std::string& line,
-                                             const std::string& ref) {
-                                                 widget->addItem(bytes, byte_count,
-                                                                 line.c_str() + 1, // remove \t
-                                                                 ref.c_str());
-                                         });
+               manager->getDisassembler()
+                       ->printEachInstruction(block->getStartAddress(),
+                                              block->getEndAddress(),
+                                              [&](uint8_t* bytes,
+                                                  size_t byte_count,
+                                                  const std::string& line,
+                                                  const std::string& ref) {
+                                                      widget->addItem(bytes, byte_count,
+                                                                      line.c_str() + 1, // remove \t
+                                                                      ref.c_str());
+                                              });
 
                BasicBlockWidget *tmp, *nextl(NULL), *nextr(NULL);
                BasicBlock * tmpblock;
@@ -238,18 +243,16 @@ namespace {
                        int xshift = 0;
                        if (block->getNextBlock(1) != 0)
                                xshift = 1;
-                       tmpblock = dis->getBasicBlock(block->getNextBlock(0));
-                       tmp = local__add_basic_block(tmpblock, dis,
-                                                    mainwindow,
+                       tmpblock = manager->getBasicBlock(block->getNextBlock(0));
+                       tmp = local__add_basic_block(tmpblock, mainwindow, manager,
                                                     known_blocks,
                                                     scene, starty, startx+xshift);
                        nextl = tmp;
                        tmp->addPrevious(widget);
                }
                if (block->getNextBlock(1) != 0) {
-                       tmpblock = dis->getBasicBlock(block->getNextBlock(1));
-                       tmp = local__add_basic_block(tmpblock, dis,
-                                                    mainwindow,
+                       tmpblock = manager->getBasicBlock(block->getNextBlock(1));
+                       tmp = local__add_basic_block(tmpblock, mainwindow, manager,
                                                     known_blocks,
                                                     scene, starty, startx-1);
                        nextr = tmp;