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);
}
// 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()) {
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");
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) {
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;
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;