summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-07-14 15:25:20 -0400
committerBrian Potchik <brian@vector35.com>2025-07-14 15:25:20 -0400
commit7fc56eae3bae6f4f9023f3417300784b30c73f3b (patch)
tree4911a4840379556e21929c72e90876ea9a73fec3
parent5bafe5c7bdb0b56037a0b5c573236f9c6367353a (diff)
Revert "Update Objective-C Workflow to use the meta workflow."
This reverts commit 5bafe5c7bdb0b56037a0b5c573236f9c6367353a.
-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, 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"))
{