summaryrefslogtreecommitdiff
path: root/plugins/workflow_objc/Workflow.h
diff options
context:
space:
mode:
authorkat <kat@vector35.com>2025-06-20 16:17:01 -0400
committerkat <kat@vector35.com>2025-06-23 10:40:55 -0400
commit76215b86ff629da58aa94d4cf4093d2e67017412 (patch)
tree06af88506096351e99053ab5ed9901ff892801f3 /plugins/workflow_objc/Workflow.h
parent17b2cb59846073fdbc08235555fd68cdb6852c42 (diff)
Move workflow_objc to API repo, remove CFString & relptr renderers
Diffstat (limited to 'plugins/workflow_objc/Workflow.h')
-rw-r--r--plugins/workflow_objc/Workflow.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/plugins/workflow_objc/Workflow.h b/plugins/workflow_objc/Workflow.h
new file mode 100644
index 00000000..4479a8a7
--- /dev/null
+++ b/plugins/workflow_objc/Workflow.h
@@ -0,0 +1,48 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include "BinaryNinja.h"
+
+/**
+ * Namespace to hold activity ID constants.
+ */
+namespace ActivityID {
+
+constexpr auto ResolveMethodCalls = "core.function.objectiveC.resolveMethodCalls";
+
+}
+
+/**
+ * Workflow-related procedures.
+ */
+class Workflow {
+
+ /**
+ * Attempt to rewrite the `objc_msgSend` call at `insnIndex` with a direct
+ * call to the requested method's implementation.
+ *
+ * @param insnIndex The index of the `LLIL_CALL` instruction to rewrite
+ */
+ static bool rewriteMethodCall(LLILFunctionRef, size_t insnIndex);
+
+public:
+ /**
+ * Attempt to inline all `objc_msgSend` calls in the given analysis context.
+ */
+ static void inlineMethodCalls(AnalysisContextRef);
+
+ /**
+ * Register the Objective Ninja workflow and all activities.
+ *
+ * This is named a bit strangely because `register` is a keyword in C++ and
+ * therefore an invalid method name, and I refuse to misspell it to appease
+ * the compiler and avoid the conflict.
+ */
+ static void registerActivities();
+};