summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/function.cpp b/function.cpp
index 9c56c644..35fe4123 100644
--- a/function.cpp
+++ b/function.cpp
@@ -119,6 +119,12 @@ Function::~Function()
}
+Ref<BinaryView> Function::GetView() const
+{
+ return new BinaryView(BNGetFunctionData(m_object));
+}
+
+
Ref<Platform> Function::GetPlatform() const
{
return new Platform(BNGetFunctionPlatform(m_object));
@@ -802,10 +808,10 @@ void Function::ApplyAutoDiscoveredType(Type* type)
}
-Ref<FunctionGraph> Function::CreateFunctionGraph()
+Ref<FlowGraph> Function::CreateFunctionGraph(BNFunctionGraphType type, DisassemblySettings* settings)
{
- BNFunctionGraph* graph = BNCreateFunctionGraph(m_object);
- return new FunctionGraph(graph);
+ BNFlowGraph* graph = BNCreateFunctionGraph(m_object, type, settings ? settings->GetObject() : nullptr);
+ return new CoreFlowGraph(graph);
}
@@ -1110,6 +1116,12 @@ Confidence<int32_t> Function::GetCallRegisterStackAdjustment(Architecture* arch,
}
+bool Function::IsCallInstruction(Architecture* arch, uint64_t addr)
+{
+ return BNIsCallInstruction(m_object, arch->GetObject(), addr);
+}
+
+
vector<vector<InstructionTextToken>> Function::GetBlockAnnotations(Architecture* arch, uint64_t addr)
{
size_t count;
@@ -1338,6 +1350,7 @@ vector<DisassemblyTextLine> Function::GetTypeTokens(DisassemblySettings* setting
DisassemblyTextLine line;
line.addr = lines[i].addr;
line.instrIndex = lines[i].instrIndex;
+ line.highlight = lines[i].highlight;
line.tokens.reserve(lines[i].count);
for (size_t j = 0; j < lines[i].count; j++)
{
@@ -1390,6 +1403,21 @@ void Function::SetAnalysisSkipOverride(BNFunctionAnalysisSkipOverride skip)
}
+Ref<FlowGraph> Function::GetUnresolvedStackAdjustmentGraph()
+{
+ BNFlowGraph* graph = BNGetUnresolvedStackAdjustmentGraph(m_object);
+ if (!graph)
+ return nullptr;
+ return new CoreFlowGraph(graph);
+}
+
+
+void Function::RequestDebugReport(const string& name)
+{
+ BNRequestFunctionDebugReport(m_object, name.c_str());
+}
+
+
AdvancedFunctionAnalysisDataRequestor::AdvancedFunctionAnalysisDataRequestor(Function* func): m_func(func)
{
if (m_func)