diff options
Diffstat (limited to 'function.cpp')
| -rw-r--r-- | function.cpp | 70 |
1 files changed, 49 insertions, 21 deletions
diff --git a/function.cpp b/function.cpp index e441d1b5..e17166ff 100644 --- a/function.cpp +++ b/function.cpp @@ -120,6 +120,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)); @@ -534,10 +540,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); } @@ -639,12 +645,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); } @@ -753,12 +759,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); } @@ -804,10 +810,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); } @@ -1022,7 +1028,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()); } @@ -1053,7 +1059,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()); } @@ -1084,10 +1090,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); } @@ -1112,6 +1118,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; @@ -1340,6 +1352,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++) { @@ -1392,6 +1405,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) |
