summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-07-14 14:45:09 -0400
committerBrian Potchik <brian@vector35.com>2025-07-14 14:45:09 -0400
commit5bafe5c7bdb0b56037a0b5c573236f9c6367353a (patch)
tree2f04a8b4c013c1f6f9b6513b9544092a26ef11f0
parent2b3ce702bdaa825af2dbff45f7899b9ffd82a257 (diff)
Update Objective-C Workflow to use the meta workflow.
-rw-r--r--docs/dev/workflows.md3
-rw-r--r--docs/guide/settings.md1
-rw-r--r--plugins/workflow_objc/Workflow.cpp24
-rw-r--r--plugins/workflow_objc/Workflow.h9
-rw-r--r--view/macho/machoview.cpp18
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"))
{