X-Git-Url: https://git.siccegge.de//index.cgi?p=frida%2Ffrida.git;a=blobdiff_plain;f=src%2Fgui%2FMainwindow.cxx;h=196db38a18b838923a3cc3403b2b6b7d6c8768d0;hp=7b207faf9504281dfa3e9b7ff2ef663ed4ddfbd6;hb=f6f7e517e577a67f01256ca0b0edea83729849f4;hpb=231dae075375e7d57982f5107b86294fbe726b33 diff --git a/src/gui/Mainwindow.cxx b/src/gui/Mainwindow.cxx index 7b207fa..196db38 100644 --- a/src/gui/Mainwindow.cxx +++ b/src/gui/Mainwindow.cxx @@ -23,9 +23,11 @@ Mainwindow::Mainwindow(InformationManager* mgr) // saveAction = new QAction(tr("&Save"), this); exitAction = new QAction(tr("E&xit"), this); - connect(openAction, SIGNAL(triggered()), this, SLOT(open())); + connect(openAction, SIGNAL(triggered()), + this, SLOT(open())); // connect(saveAction, SIGNAL(triggered()), this, SLOT(save())); - connect(exitAction, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(exitAction, SIGNAL(triggered()), + qApp, SLOT(quit())); fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(openAction); @@ -84,11 +86,16 @@ void Mainwindow::addFunction(Function* fun) { CFGScene * scene = new CFGScene; Disassembler * dis = manager->getDisassembler(); - std::cerr << dis << std::endl; - BasicBlock * block = dis->getBasicBlock(fun->getStartAddress()); - local__add_basic_block(block, manager->getDisassembler(), blocks, scene, block->getStartAddress(), 100); + uint64_t start_address(std::numeric_limits::max()); + for (auto b : fun->blocks()) { + if (b.first < start_address) + start_address = b.first; + } + + local__add_basic_block(block, manager->getDisassembler(), blocks, scene, + start_address, 100); QGraphicsView * view = new QGraphicsView(scene); w->addTab(view, "CFG"); @@ -125,10 +132,13 @@ 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) { - widget->addItem(bytes, byte_count, line.c_str() + 1); - }); + dis->printEachInstruction(block->getStartAddress(), + block->getEndAddress(), + [&](uint8_t* bytes, + size_t byte_count, + const std::string& line) { + widget->addItem(bytes, byte_count, line.c_str() + 1); + }); BasicBlockWidget *tmp, *nextl(NULL), *nextr(NULL); BasicBlock * tmpblock; @@ -138,16 +148,16 @@ namespace { xshift = 1; tmpblock = dis->getBasicBlock(block->getNextBlock(0)); tmp = local__add_basic_block(tmpblock, dis, - known_blocks, - scene, starty, startx+xshift); + 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, - known_blocks, - scene, starty, startx-1); + known_blocks, + scene, starty, startx-1); nextr = tmp; tmp->addPrevious(widget); }