From 05b8dae707da62437abf262fe8d1dd2b74a5f98f Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Wed, 6 Jul 2016 22:58:22 -0400 Subject: Add API to get disassembly text for a basic block outside of a graph --- basicblock.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'basicblock.cpp') diff --git a/basicblock.cpp b/basicblock.cpp index 5acf41d7..67ee1983 100644 --- a/basicblock.cpp +++ b/basicblock.cpp @@ -24,6 +24,54 @@ using namespace BinaryNinja; using namespace std; +DisassemblySettings::DisassemblySettings() +{ + m_object = BNCreateDisassemblySettings(); +} + + +DisassemblySettings::DisassemblySettings(BNDisassemblySettings* settings) +{ + m_object = settings; +} + + +bool DisassemblySettings::IsOptionSet(BNDisassemblyOption option) const +{ + return BNIsDisassemblySettingsOptionSet(m_object, option); +} + + +void DisassemblySettings::SetOption(BNDisassemblyOption option, bool state) +{ + BNSetDisassemblySettingsOption(m_object, option, state); +} + + +size_t DisassemblySettings::GetWidth() const +{ + return BNGetDisassemblyWidth(m_object); +} + + +void DisassemblySettings::SetWidth(size_t width) +{ + BNSetDisassemblyWidth(m_object, width); +} + + +size_t DisassemblySettings::GetMaximumSymbolWidth() const +{ + return BNGetDisassemblyMaximumSymbolWidth(m_object); +} + + +void DisassemblySettings::SetMaximumSymbolWidth(size_t width) +{ + BNSetDisassemblyMaximumSymbolWidth(m_object, width); +} + + BasicBlock::BasicBlock(BNBasicBlock* block) { m_object = block; @@ -96,3 +144,29 @@ vector> BasicBlock::GetAnnotations() { return GetFunction()->GetBlockAnnotations(GetArchitecture(), GetStart()); } + + +vector BasicBlock::GetDisassemblyText(DisassemblySettings* settings) +{ + size_t count; + BNDisassemblyTextLine* lines = BNGetBasicBlockDisassemblyText(m_object, settings->GetObject(), &count); + + vector result; + for (size_t i = 0; i < count; i++) + { + DisassemblyTextLine line; + line.addr = lines[i].addr; + for (size_t j = 0; j < lines[i].count; j++) + { + InstructionTextToken token; + token.type = lines[i].tokens[j].type; + token.text = lines[i].tokens[j].text; + token.value = lines[i].tokens[j].value; + line.tokens.push_back(token); + } + result.push_back(line); + } + + BNFreeDisassemblyTextLines(lines, count); + return result; +} -- cgit v1.3.1