diff options
| author | Brian Potchik <brian@vector35.com> | 2025-07-14 14:45:09 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-07-14 14:45:09 -0400 |
| commit | 5bafe5c7bdb0b56037a0b5c573236f9c6367353a (patch) | |
| tree | 2f04a8b4c013c1f6f9b6513b9544092a26ef11f0 | |
| parent | 2b3ce702bdaa825af2dbff45f7899b9ffd82a257 (diff) | |
Update Objective-C Workflow to use the meta workflow.
| -rw-r--r-- | docs/dev/workflows.md | 3 | ||||
| -rw-r--r-- | docs/guide/settings.md | 1 | ||||
| -rw-r--r-- | plugins/workflow_objc/Workflow.cpp | 24 | ||||
| -rw-r--r-- | plugins/workflow_objc/Workflow.h | 9 | ||||
| -rw-r--r-- | view/macho/machoview.cpp | 18 |
5 files changed, 18 insertions, 37 deletions
diff --git a/docs/dev/workflows.md b/docs/dev/workflows.md index 53613325..df118fc1 100644 --- a/docs/dev/workflows.md +++ b/docs/dev/workflows.md @@ -178,7 +178,6 @@ list(Workflow) [<Workflow: core.function.baseAnalysis>, <Workflow: core.function.sharedCache>, <Workflow: core.function.metaAnalysis>, -<Workflow: core.function.objectiveC>, <Workflow: core.module.baseAnalysis>, <Workflow: core.module.metaAnalysis>] @@ -188,7 +187,7 @@ Settings().query_property_string_list("analysis.workflows.moduleWorkflow", "enum # List all function workflows from the Settings API >>> Settings().query_property_string_list("analysis.workflows.functionWorkflow", "enum") -['core.function.baseAnalysis', 'core.function.sharedCache', 'core.function.metaAnalysis', 'core.function.objectiveC'] +['core.function.baseAnalysis', 'core.function.sharedCache', 'core.function.metaAnalysis'] ``` Once you've queried the available workflows, you can create your own by cloning and modifying an existing workflow. Below are some simple examples that demonstrate how to modify module-level analysis. diff --git a/docs/guide/settings.md b/docs/guide/settings.md index 4b729b82..dd3209f6 100644 --- a/docs/guide/settings.md +++ b/docs/guide/settings.md @@ -189,7 +189,6 @@ The setting will appear under the `Function Settings` submenu in applicable cont |analysis.workflows|Function Workflow|Specifies the workflow to be used for function-level analysis, including tasks such as disassembly and IL transformations.|`string`|`core.function.metaAnalysis`|[`SettingsProjectScope`, `SettingsResourceScope`, `SettingsUserScope`]|<a id='analysis.workflows.functionWorkflow'>analysis.workflows.functionWorkflow</a>| | | | enum: This workflow defines the base function analysis provided by Binary Ninja.|`enum`|`core.function.baseAnalysis`| | | | | | enum: This workflow defines the adaptive function analysis for Binary Ninja, enabling adaptive composability of the default function analysis.|`enum`|`core.function.metaAnalysis`| | | -| | | enum: Enhanced analysis for Objective-C code.|`enum`|`core.function.objectiveC`| | | | | | enum: Shared Cache Workflow|`enum`|`core.function.sharedCache`| | | |analysis.workflows|Module Workflow|Specifies the workflow to be used for module-level analysis, focusing on processing module-level data and coordinating function analyses.|`string`|`core.module.metaAnalysis`|[`SettingsProjectScope`, `SettingsResourceScope`, `SettingsUserScope`]|<a id='analysis.workflows.moduleWorkflow'>analysis.workflows.moduleWorkflow</a>| | | | enum: This workflow defines the base module analysis for Binary Ninja.|`enum`|`core.module.baseAnalysis`| | | diff --git a/plugins/workflow_objc/Workflow.cpp b/plugins/workflow_objc/Workflow.cpp index e0986943..176a0fcd 100644 --- a/plugins/workflow_objc/Workflow.cpp +++ b/plugins/workflow_objc/Workflow.cpp @@ -299,18 +299,20 @@ void Workflow::inlineMethodCalls(AnalysisContextRef ac) llil->GenerateSSAForm(); } -static constexpr auto WorkflowInfo = R"({ - "title": "Objective-C", - "description": "Enhanced analysis for Objective-C code.", - "capabilities": [] -})"; - void Workflow::registerActivities() { - const auto wf = BinaryNinja::Workflow::Instance("core.function.baseAnalysis")->Clone("core.function.objectiveC"); - wf->RegisterActivity(new BinaryNinja::Activity( - ActivityID::ResolveMethodCalls, &Workflow::inlineMethodCalls)); - wf->InsertAfter("core.function.translateTailCalls", ActivityID::ResolveMethodCalls); + auto workflow = BinaryNinja::Workflow::Instance("core.function.metaAnalysis")->Clone(); + workflow->RegisterActivity(new BinaryNinja::Activity( + R"({ + "name": "analysis.objectiveC.resolveMethodCalls", + "title" : "Objective-C Method Call Resolution", + "description": "This analysis step performs enhanced analysis for Objective-C code.", + "aliases": ["core.function.objectiveC.resolveMethodCalls"], + "eligibility": { + "auto": { "default": false } + } + })", &Workflow::inlineMethodCalls)); + workflow->InsertAfter("core.function.translateTailCalls", "analysis.objectiveC.resolveMethodCalls"); - BinaryNinja::Workflow::RegisterWorkflow(wf, WorkflowInfo); + BinaryNinja::Workflow::RegisterWorkflow(workflow); } diff --git a/plugins/workflow_objc/Workflow.h b/plugins/workflow_objc/Workflow.h index 4479a8a7..8b24951b 100644 --- a/plugins/workflow_objc/Workflow.h +++ b/plugins/workflow_objc/Workflow.h @@ -10,15 +10,6 @@ #include "BinaryNinja.h" /** - * Namespace to hold activity ID constants. - */ -namespace ActivityID { - -constexpr auto ResolveMethodCalls = "core.function.objectiveC.resolveMethodCalls"; - -} - -/** * Workflow-related procedures. */ class Workflow { diff --git a/view/macho/machoview.cpp b/view/macho/machoview.cpp index 4e228a33..f5cf66d2 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -1867,13 +1867,8 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_ if (!settings) // Add our defaults { Ref<Settings> programSettings = Settings::Instance(); - if (programSettings->Contains("corePlugins.workflows.objc")) - { - if (programSettings->Get<bool>("corePlugins.workflows.objc")) - { - programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", this); - } - } + if (programSettings->Contains("analysis.objectiveC.resolveMethodCalls")) + programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, this); } } @@ -4139,13 +4134,8 @@ Ref<Settings> MachoViewType::GetLoadSettingsForData(BinaryView* data) "description" : "Processes Objective-C structures, applying method names and types from encoded metadata" })"); Ref<Settings> programSettings = Settings::Instance(); - if (programSettings->Contains("corePlugins.workflows.objc")) - { - if (programSettings->Get<bool>("corePlugins.workflows.objc")) - { - programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", viewRef); - } - } + if (programSettings->Contains("analysis.objectiveC.resolveMethodCalls")) + programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, viewRef); } if (viewRef->GetSectionByName("__cfstring")) { |
