summaryrefslogtreecommitdiff
path: root/plugins/workflow_objc/Plugin.cpp
diff options
context:
space:
mode:
authorMark Rowe <mark@vector35.com>2025-08-11 10:42:07 -0700
committerMark Rowe <mark@vector35.com>2025-08-27 19:15:49 -0700
commit2303f75b080f6dd0c9a5c669a71f64ce830f5650 (patch)
treea49d80ea0a8131a50c16f85e767722679ff08c85 /plugins/workflow_objc/Plugin.cpp
parentb302d7ba796f41b1102ee61feed8b8e212299997 (diff)
Rewrite Obj-C workflow in Rust
This is functionally equivalent to the previous workflow_objc, with the following changes: 1. It mutates the `core.function.metaAnalysis` workflow rather than registering a new named workflow. The activities now all check for the presence of the Objective-C metadata added by `ObjCProcessor` to determine whether they should do work, rather than relying on `MachoView` to override the function workflow when Objective-C metadata is present. This fixes https://github.com/Vector35/binaryninja-api/issues/6779. 2. The auto-inlining of `objc_msgSend` selector stub functions is performed in a separate activity from the processing of `objc_msgSend` call sites. The selector stub inlining activity is configured so that it does not run in `DSCView` as the shared cache needs different behavior for stub functions more generally that `SharedCacheWorkflow` already provides. 3. The way that types like `id` and `SEL` are referenced is fixed so that they show up as `id` rather than `objc_struct*`. This also replaces the Objective-C portion of the shared cache's workflow, and incorporates several bug fixes that had been applied to it but not the standalone Objective-C workflow.
Diffstat (limited to 'plugins/workflow_objc/Plugin.cpp')
-rw-r--r--plugins/workflow_objc/Plugin.cpp45
1 files changed, 0 insertions, 45 deletions
diff --git a/plugins/workflow_objc/Plugin.cpp b/plugins/workflow_objc/Plugin.cpp
deleted file mode 100644
index 6323e1a6..00000000
--- a/plugins/workflow_objc/Plugin.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (c) 2022-2023 Jon Palmisciano. All rights reserved.
- *
- * Use of this source code is governed by the BSD 3-Clause license; the full
- * terms of the license can be found in the LICENSE.txt file.
- */
-
-#include "Constants.h"
-#include "Workflow.h"
-
-extern "C" {
-
-BN_DECLARE_CORE_ABI_VERSION
-
-BINARYNINJAPLUGIN void CorePluginDependencies()
-{
- BinaryNinja::AddOptionalPluginDependency("arch_x86");
- BinaryNinja::AddOptionalPluginDependency("arch_armv7");
- BinaryNinja::AddOptionalPluginDependency("arch_arm64");
-}
-
-BINARYNINJAPLUGIN bool CorePluginInit()
-{
- Workflow::registerActivities();
-
- std::vector<BinaryNinja::Ref<BinaryNinja::Architecture>> targets = {
- BinaryNinja::Architecture::GetByName("aarch64"),
- BinaryNinja::Architecture::GetByName("x86_64")
- };
-
- BinaryNinja::LogRegistry::CreateLogger(PluginLoggerName);
-
- auto settings = BinaryNinja::Settings::Instance();
- settings->RegisterSetting("analysis.objectiveC.resolveDynamicDispatch",
- R"({
- "title" : "Resolve Dynamic Dispatch Calls",
- "type" : "boolean",
- "default" : false,
- "aliases": ["core.function.objectiveC.assumeMessageSendTarget", "core.function.objectiveC.rewriteMessageSendTarget"],
- "description" : "Replaces objc_msgSend calls with direct calls to the first found implementation when the target method is visible. May produce false positives when multiple classes implement the same selector or when selectors conflict with system framework methods."
- })");
-
- return true;
-}
-}