summaryrefslogtreecommitdiff
path: root/function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'function.cpp')
-rw-r--r--function.cpp70
1 files changed, 49 insertions, 21 deletions
diff --git a/function.cpp b/function.cpp
index 9c56c644..167a6285 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));
@@ -532,10 +538,10 @@ Confidence<bool> Function::HasVariableArguments() const
}
-Confidence<size_t> Function::GetStackAdjustment() const
+Confidence<int64_t> Function::GetStackAdjustment() const
{
- BNSizeWithConfidence sc = BNGetFunctionStackAdjustment(m_object);
- return Confidence<size_t>(sc.value, sc.confidence);
+ BNOffsetWithConfidence oc = BNGetFunctionStackAdjustment(m_object);
+ return Confidence<int64_t>(oc.value, oc.confidence);
}
@@ -637,12 +643,12 @@ void Function::SetAutoCanReturn(const Confidence<bool>& returns)
}
-void Function::SetAutoStackAdjustment(const Confidence<size_t>& stackAdjust)
+void Function::SetAutoStackAdjustment(const Confidence<int64_t>& stackAdjust)
{
- BNSizeWithConfidence sc;
- sc.value = stackAdjust.GetValue();
- sc.confidence = stackAdjust.GetConfidence();
- BNSetAutoFunctionStackAdjustment(m_object, &sc);
+ BNOffsetWithConfidence oc;
+ oc.value = stackAdjust.GetValue();
+ oc.confidence = stackAdjust.GetConfidence();
+ BNSetAutoFunctionStackAdjustment(m_object, &oc);
}
@@ -751,12 +757,12 @@ void Function::SetCanReturn(const Confidence<bool>& returns)
}
-void Function::SetStackAdjustment(const Confidence<size_t>& stackAdjust)
+void Function::SetStackAdjustment(const Confidence<int64_t>& stackAdjust)
{
- BNSizeWithConfidence sc;
- sc.value = stackAdjust.GetValue();
- sc.confidence = stackAdjust.GetConfidence();
- BNSetUserFunctionStackAdjustment(m_object, &sc);
+ BNOffsetWithConfidence oc;
+ oc.value = stackAdjust.GetValue();
+ oc.confidence = stackAdjust.GetConfidence();
+ BNSetUserFunctionStackAdjustment(m_object, &oc);
}
@@ -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);
}
@@ -1020,7 +1026,7 @@ vector<IndirectBranchInfo> Function::GetIndirectBranchesAt(Architecture* arch, u
}
-void Function::SetAutoCallStackAdjustment(Architecture* arch, uint64_t addr, const Confidence<size_t>& adjust)
+void Function::SetAutoCallStackAdjustment(Architecture* arch, uint64_t addr, const Confidence<int64_t>& adjust)
{
BNSetAutoCallStackAdjustment(m_object, arch->GetObject(), addr, adjust.GetValue(), adjust.GetConfidence());
}
@@ -1051,7 +1057,7 @@ void Function::SetAutoCallRegisterStackAdjustment(Architecture* arch, uint64_t a
}
-void Function::SetUserCallStackAdjustment(Architecture* arch, uint64_t addr, const Confidence<size_t>& adjust)
+void Function::SetUserCallStackAdjustment(Architecture* arch, uint64_t addr, const Confidence<int64_t>& adjust)
{
BNSetUserCallStackAdjustment(m_object, arch->GetObject(), addr, adjust.GetValue(), adjust.GetConfidence());
}
@@ -1082,10 +1088,10 @@ void Function::SetUserCallRegisterStackAdjustment(Architecture* arch, uint64_t a
}
-Confidence<size_t> Function::GetCallStackAdjustment(Architecture* arch, uint64_t addr)
+Confidence<int64_t> Function::GetCallStackAdjustment(Architecture* arch, uint64_t addr)
{
- BNSizeWithConfidence result = BNGetCallStackAdjustment(m_object, arch->GetObject(), addr);
- return Confidence<size_t>(result.value, result.confidence);
+ BNOffsetWithConfidence result = BNGetCallStackAdjustment(m_object, arch->GetObject(), addr);
+ return Confidence<int64_t>(result.value, result.confidence);
}
@@ -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)