summaryrefslogtreecommitdiff
path: root/basicblock.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-07-06 22:58:22 -0400
committerRusty Wagner <rusty@vector35.com>2016-07-06 22:58:22 -0400
commit05b8dae707da62437abf262fe8d1dd2b74a5f98f (patch)
tree7a2ed3fff81d9e77da8c5b9c75c0e635e32a36c0 /basicblock.cpp
parenta7eaa72caa4a5e3e7cd7ea7c32236c93b06d1442 (diff)
Add API to get disassembly text for a basic block outside of a graph
Diffstat (limited to 'basicblock.cpp')
-rw-r--r--basicblock.cpp74
1 files changed, 74 insertions, 0 deletions
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<vector<InstructionTextToken>> BasicBlock::GetAnnotations()
{
return GetFunction()->GetBlockAnnotations(GetArchitecture(), GetStart());
}
+
+
+vector<DisassemblyTextLine> BasicBlock::GetDisassemblyText(DisassemblySettings* settings)
+{
+ size_t count;
+ BNDisassemblyTextLine* lines = BNGetBasicBlockDisassemblyText(m_object, settings->GetObject(), &count);
+
+ vector<DisassemblyTextLine> 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;
+}