summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-09-14 00:28:27 -0400
committerRusty Wagner <rusty@vector35.com>2016-09-14 00:28:27 -0400
commitfb0d896cd5cc3197a8dd259a9ca53f2788ef5fdb (patch)
tree3060742ed0484944bc16f4857435d68fbb12167f /function.cpp
parent11d6f78e43e0f305be43aeb8fc75d9d6733e508a (diff)
Add APIs for instruction and block highlighting
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/function.cpp b/function.cpp
index de12918f..109b6f49 100644
--- a/function.cpp
+++ b/function.cpp
@@ -100,6 +100,15 @@ vector<Ref<BasicBlock>> Function::GetBasicBlocks() const
}
+Ref<BasicBlock> Function::GetBasicBlockAtAddress(Architecture* arch, uint64_t addr) const
+{
+ BNBasicBlock* block = BNGetFunctionBasicBlockAtAddress(m_object, arch->GetObject(), addr);
+ if (!block)
+ return nullptr;
+ return new BasicBlock(block);
+}
+
+
void Function::MarkRecentUse()
{
BNMarkFunctionAsRecentlyUsed(m_object);
@@ -582,6 +591,120 @@ void Function::SetIntegerConstantDisplayType(Architecture* arch, uint64_t instrA
}
+BNHighlightColor Function::GetInstructionHighlight(Architecture* arch, uint64_t addr)
+{
+ return BNGetInstructionHighlight(m_object, arch->GetObject(), addr);
+}
+
+
+void Function::SetAutoInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightColor color)
+{
+ BNSetAutoInstructionHighlight(m_object, arch->GetObject(), addr, color);
+}
+
+
+void Function::SetAutoInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightStandardColor color,
+ uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = StandardHighlightColor;
+ hc.color = color;
+ hc.mixColor = NoHighlightColor;
+ hc.mix = 0;
+ hc.r = 0;
+ hc.g = 0;
+ hc.b = 0;
+ hc.alpha = alpha;
+ SetAutoInstructionHighlight(arch, addr, hc);
+}
+
+
+void Function::SetAutoInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightStandardColor color,
+ BNHighlightStandardColor mixColor, uint8_t mix, uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = MixedHighlightColor;
+ hc.color = color;
+ hc.mixColor = mixColor;
+ hc.mix = mix;
+ hc.r = 0;
+ hc.g = 0;
+ hc.b = 0;
+ hc.alpha = alpha;
+ SetAutoInstructionHighlight(arch, addr, hc);
+}
+
+
+void Function::SetAutoInstructionHighlight(Architecture* arch, uint64_t addr, uint8_t r, uint8_t g, uint8_t b,
+ uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = CustomHighlightColor;
+ hc.color = NoHighlightColor;
+ hc.mixColor = NoHighlightColor;
+ hc.mix = 0;
+ hc.r = r;
+ hc.g = g;
+ hc.b = b;
+ hc.alpha = alpha;
+ SetAutoInstructionHighlight(arch, addr, hc);
+}
+
+
+void Function::SetUserInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightColor color)
+{
+ BNSetUserInstructionHighlight(m_object, arch->GetObject(), addr, color);
+}
+
+
+void Function::SetUserInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightStandardColor color,
+ uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = StandardHighlightColor;
+ hc.color = color;
+ hc.mixColor = NoHighlightColor;
+ hc.mix = 0;
+ hc.r = 0;
+ hc.g = 0;
+ hc.b = 0;
+ hc.alpha = alpha;
+ SetUserInstructionHighlight(arch, addr, hc);
+}
+
+
+void Function::SetUserInstructionHighlight(Architecture* arch, uint64_t addr, BNHighlightStandardColor color,
+ BNHighlightStandardColor mixColor, uint8_t mix, uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = MixedHighlightColor;
+ hc.color = color;
+ hc.mixColor = mixColor;
+ hc.mix = mix;
+ hc.r = 0;
+ hc.g = 0;
+ hc.b = 0;
+ hc.alpha = alpha;
+ SetUserInstructionHighlight(arch, addr, hc);
+}
+
+
+void Function::SetUserInstructionHighlight(Architecture* arch, uint64_t addr, uint8_t r, uint8_t g, uint8_t b,
+ uint8_t alpha)
+{
+ BNHighlightColor hc;
+ hc.style = CustomHighlightColor;
+ hc.color = NoHighlightColor;
+ hc.mixColor = NoHighlightColor;
+ hc.mix = 0;
+ hc.r = r;
+ hc.g = g;
+ hc.b = b;
+ hc.alpha = alpha;
+ SetUserInstructionHighlight(arch, addr, hc);
+}
+
+
void Function::Reanalyze()
{
BNReanalyzeFunction(m_object);