Skip to content

Commit 7fc56ea

Browse files
committed
Revert "Update Objective-C Workflow to use the meta workflow."
This reverts commit 5bafe5c.
1 parent 5bafe5c commit 7fc56ea

File tree

5 files changed

+37
-18
lines changed

5 files changed

+37
-18
lines changed

docs/dev/workflows.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ list(Workflow)
178178
[<Workflow: core.function.baseAnalysis>,
179179
<Workflow: core.function.sharedCache>,
180180
<Workflow: core.function.metaAnalysis>,
181+
<Workflow: core.function.objectiveC>,
181182
<Workflow: core.module.baseAnalysis>,
182183
<Workflow: core.module.metaAnalysis>]
183184

@@ -187,7 +188,7 @@ Settings().query_property_string_list("analysis.workflows.moduleWorkflow", "enum
187188

188189
# List all function workflows from the Settings API
189190
>>> Settings().query_property_string_list("analysis.workflows.functionWorkflow", "enum")
190-
['core.function.baseAnalysis', 'core.function.sharedCache', 'core.function.metaAnalysis']
191+
['core.function.baseAnalysis', 'core.function.sharedCache', 'core.function.metaAnalysis', 'core.function.objectiveC']
191192
```
192193

193194
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.

docs/guide/settings.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ The setting will appear under the `Function Settings` submenu in applicable cont
189189
|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>|
190190
| | | enum: This workflow defines the base function analysis provided by Binary Ninja.|`enum`|`core.function.baseAnalysis`| | |
191191
| | | enum: This workflow defines the adaptive function analysis for Binary Ninja, enabling adaptive composability of the default function analysis.|`enum`|`core.function.metaAnalysis`| | |
192+
| | | enum: Enhanced analysis for Objective-C code.|`enum`|`core.function.objectiveC`| | |
192193
| | | enum: Shared Cache Workflow|`enum`|`core.function.sharedCache`| | |
193194
|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>|
194195
| | | enum: This workflow defines the base module analysis for Binary Ninja.|`enum`|`core.module.baseAnalysis`| | |

plugins/workflow_objc/Workflow.cpp

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -299,20 +299,18 @@ void Workflow::inlineMethodCalls(AnalysisContextRef ac)
299299
llil->GenerateSSAForm();
300300
}
301301

302+
static constexpr auto WorkflowInfo = R"({
303+
"title": "Objective-C",
304+
"description": "Enhanced analysis for Objective-C code.",
305+
"capabilities": []
306+
})";
307+
302308
void Workflow::registerActivities()
303309
{
304-
auto workflow = BinaryNinja::Workflow::Instance("core.function.metaAnalysis")->Clone();
305-
workflow->RegisterActivity(new BinaryNinja::Activity(
306-
R"({
307-
"name": "analysis.objectiveC.resolveMethodCalls",
308-
"title" : "Objective-C Method Call Resolution",
309-
"description": "This analysis step performs enhanced analysis for Objective-C code.",
310-
"aliases": ["core.function.objectiveC.resolveMethodCalls"],
311-
"eligibility": {
312-
"auto": { "default": false }
313-
}
314-
})", &Workflow::inlineMethodCalls));
315-
workflow->InsertAfter("core.function.translateTailCalls", "analysis.objectiveC.resolveMethodCalls");
310+
const auto wf = BinaryNinja::Workflow::Instance("core.function.baseAnalysis")->Clone("core.function.objectiveC");
311+
wf->RegisterActivity(new BinaryNinja::Activity(
312+
ActivityID::ResolveMethodCalls, &Workflow::inlineMethodCalls));
313+
wf->InsertAfter("core.function.translateTailCalls", ActivityID::ResolveMethodCalls);
316314

317-
BinaryNinja::Workflow::RegisterWorkflow(workflow);
315+
BinaryNinja::Workflow::RegisterWorkflow(wf, WorkflowInfo);
318316
}

plugins/workflow_objc/Workflow.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@
99

1010
#include "BinaryNinja.h"
1111

12+
/**
13+
* Namespace to hold activity ID constants.
14+
*/
15+
namespace ActivityID {
16+
17+
constexpr auto ResolveMethodCalls = "core.function.objectiveC.resolveMethodCalls";
18+
19+
}
20+
1221
/**
1322
* Workflow-related procedures.
1423
*/

view/macho/machoview.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,8 +1867,13 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_
18671867
if (!settings) // Add our defaults
18681868
{
18691869
Ref<Settings> programSettings = Settings::Instance();
1870-
if (programSettings->Contains("analysis.objectiveC.resolveMethodCalls"))
1871-
programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, this);
1870+
if (programSettings->Contains("corePlugins.workflows.objc"))
1871+
{
1872+
if (programSettings->Get<bool>("corePlugins.workflows.objc"))
1873+
{
1874+
programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", this);
1875+
}
1876+
}
18721877
}
18731878
}
18741879

@@ -4134,8 +4139,13 @@ Ref<Settings> MachoViewType::GetLoadSettingsForData(BinaryView* data)
41344139
"description" : "Processes Objective-C structures, applying method names and types from encoded metadata"
41354140
})");
41364141
Ref<Settings> programSettings = Settings::Instance();
4137-
if (programSettings->Contains("analysis.objectiveC.resolveMethodCalls"))
4138-
programSettings->Set("analysis.objectiveC.resolveMethodCalls", true, viewRef);
4142+
if (programSettings->Contains("corePlugins.workflows.objc"))
4143+
{
4144+
if (programSettings->Get<bool>("corePlugins.workflows.objc"))
4145+
{
4146+
programSettings->Set("analysis.workflows.functionWorkflow", "core.function.objectiveC", viewRef);
4147+
}
4148+
}
41394149
}
41404150
if (viewRef->GetSectionByName("__cfstring"))
41414151
{

0 commit comments

Comments
 (0)