diff options
| author | Brian Potchik <brian@vector35.com> | 2025-07-14 15:25:20 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-07-14 15:25:20 -0400 |
| commit | 7fc56eae3bae6f4f9023f3417300784b30c73f3b (patch) | |
| tree | 4911a4840379556e21929c72e90876ea9a73fec3 | |
| parent | 5bafe5c7bdb0b56037a0b5c573236f9c6367353a (diff) | |
Revert "Update Objective-C Workflow to use the meta workflow."
This reverts commit 5bafe5c7bdb0b56037a0b5c573236f9c6367353a.
| -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, 37 insertions, 18 deletions
diff --git a/docs/dev/workflows.md b/docs/dev/workflows.md index df118fc1..53613325 100644 --- a/docs/dev/workflows.md +++ b/docs/dev/workflows.md @@ -178,6 +178,7 @@ 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>] @@ -187,7 +188,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.baseAnalysis', 'core.function.sharedCache', 'core.function.metaAnalysis', 'core.function.objectiveC'] ``` 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 dd3209f6..4b729b82 100644 --- a/docs/guide/settings.md +++ b/docs/guide/settings.md @@ -189,6 +189,7 @@ 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 176a0fcd..e0986943 100644 --- a/plugins/workflow_objc/Workflow.cpp +++ b/plugins/workflow_objc/Workflow.cpp @@ -299,20 +299,18 @@ 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() { - 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"); + 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); - BinaryNinja::Workflow::RegisterWorkflow(workflow); + BinaryNinja::Workflow::RegisterWorkflow(wf, WorkflowInfo); } diff --git a/plugins/workflow_objc/Workflow.h b/plugins/workflow_objc/Workflow.h index 8b24951b..4479a8a7 100644 --- a/plugins/workflow_objc/Workflow.h +++ b/plugins/workflow_objc/Workflow.h @@ -10,6 +10,15 @@ #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 f5cf66d2..4e228a33 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -1867,8 +1867,13 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_ if (!settings) // Add our defaults { Ref<Settings> programSettings = Settings::Instance(); - if (programSettings->Contains("analysis.objectiveC.resolveMethodCalls")) - programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, this); + if (programSettings->Contains("corePlugins.workflows.objc")) + { + if (programSettings->Get<bool>("corePlugins.workflows.objc")) + { + programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", this); + } + } } } @@ -4134,8 +4139,13 @@ 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("analysis.objectiveC.resolveMethodCalls")) - programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, viewRef); + if (programSettings->Contains("corePlugins.workflows.objc")) + { + if (programSettings->Get<bool>("corePlugins.workflows.objc")) + { + programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", viewRef); + } + } } if (viewRef->GetSectionByName("__cfstring")) { |
