From 6d7f4ac49f5db820c5c468b69efc953cab87307b Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Thu, 24 Oct 2024 12:06:09 -0400 Subject: Initial implementation of the module-level analysis workflow. --- binaryninjaapi.h | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'binaryninjaapi.h') diff --git a/binaryninjaapi.h b/binaryninjaapi.h index bcaf644e..e67a836e 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -6419,7 +6419,7 @@ namespace BinaryNinja { void Reanalyze(); - Ref GetWorkflow() const; + Ref GetWorkflow(); /*! Displays contents to the user in the UI or on the command-line @@ -9914,6 +9914,20 @@ namespace BinaryNinja { std::string GetName() const; }; + class WorkflowMachine + { + Ref m_view; + Ref m_function; + + public: + WorkflowMachine(Ref view); + WorkflowMachine(Ref function); + + std::optional QueryOverride(const std::string& activity); + bool SetOverride(const std::string& activity, bool enable); + bool ClearOverride(const std::string& activity); + }; + /*! A Binary Ninja Workflow is an abstraction of a computational binary analysis pipeline and it provides the extensibility mechanism needed for tailored binary analysis and decompilation. More specifically, a Workflow is a repository of activities along with a unique strategy to execute them. Binary Ninja provides two Workflows named ``core.module.defaultAnalysis`` and ``core.function.defaultAnalysis`` @@ -9927,9 +9941,13 @@ namespace BinaryNinja { */ class Workflow : public CoreRefCountObject { + std::unique_ptr m_machine; + public: Workflow(const std::string& name = ""); Workflow(BNWorkflow* workflow); + Workflow(BNWorkflow* workflow, Ref view); + Workflow(BNWorkflow* workflow, Ref function); virtual ~Workflow() {} /*! Get a list of all workflows @@ -10095,6 +10113,8 @@ namespace BinaryNinja { void ShowReport(const std::string& name); std::vector GetEligibilitySettings(); + + WorkflowMachine* GetWorkflowMachine() const { return m_machine.get(); } }; class DisassemblySettings : @@ -11012,7 +11032,7 @@ namespace BinaryNinja { void MarkUpdatesRequired(BNFunctionUpdateType type = UserFunctionUpdate); void MarkCallerUpdatesRequired(BNFunctionUpdateType type = UserFunctionUpdate); - Ref GetWorkflow() const; + Ref GetWorkflow(); void RequestAdvancedAnalysisData(); void ReleaseAdvancedAnalysisData(); -- cgit v1.3.1