1
0
Fork 0

GUI: very basic graph working

This commit is contained in:
Mr. eXoDia 2016-07-17 01:25:05 +02:00
parent e24d8c21a3
commit fdc08c6600
1 changed files with 18 additions and 5 deletions

View File

@ -5,6 +5,7 @@
#include <QClipboard>
#include <QApplication>
#include <QMimeData>
#include "capstone_wrapper.h"
DisassemblerGraphView::DisassemblerGraphView(QWidget* parent)
: QAbstractScrollArea(parent)
@ -1167,6 +1168,7 @@ void DisassemblerGraphView::loadGraphSlot(BridgeCFGraphList* graphList)
BridgeCFGraph graph(graphList);
Bridge::getBridge()->setResult();
Analysis anal;
Capstone cp;
anal.update_id = this->update_id + 1;
anal.entry = graph.entryPoint;
anal.ready = true;
@ -1186,12 +1188,23 @@ void DisassemblerGraphView::loadGraphSlot(BridgeCFGraphList* graphList)
block.true_path = node.brtrue;
block.header_text = Text(ToPtrString(block.entry), Qt::red, block.entry);
{
//TODO: disassemble blocks
Instr instr;
instr.addr = node.end;
instr.opcode.push_back(0x90);
instr.text = Text(ToPtrString(instr.addr), Qt::blue, instr.addr);
block.instrs.push_back(instr);
unsigned char data[MAX_DISASM_BUFFER];
for(duint i = 0; i < node.data.size();)
{
data[0] = 0xFF;
memcpy(data, node.data.data() + i, qMin(sizeof(data), node.data.size() - i));
auto addr = node.start + i;
cp.Disassemble(addr, data);
auto size = cp.Size();
instr.addr = addr;
instr.opcode.resize(size);
for(size_t j = 0; j < size; j++)
instr.opcode[j] = data[j];
instr.text = Text(cp.InstructionText().c_str(), Qt::black, instr.addr);
block.instrs.push_back(instr);
i += size;
}
}
func.blocks.push_back(block);
}