// 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);
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<uint64_t>::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");
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;
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);
}