diff options
Diffstat (limited to 'plugins/workflow_objc/src/workflow.rs')
| -rw-r--r-- | plugins/workflow_objc/src/workflow.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/plugins/workflow_objc/src/workflow.rs b/plugins/workflow_objc/src/workflow.rs index 090a8e5e..f411951b 100644 --- a/plugins/workflow_objc/src/workflow.rs +++ b/plugins/workflow_objc/src/workflow.rs @@ -2,6 +2,14 @@ use binaryninja::workflow::{activity, Activity, AnalysisContext, Workflow}; use crate::{activities, error::WorkflowRegistrationError}; +/// Base confidence levels for types applied by each of the activities in this workflow. +/// These are ordered such that later activities can override types applied by earlier activities. +#[repr(u8)] +pub enum Confidence { + ObjCMsgSend = 96, + SuperInit = 100, +} + const WORKFLOW_INFO: &str = r#"{ "title": "Objective-C", "description": "Enhanced analysis for Objective-C code.", @@ -48,9 +56,23 @@ pub fn register_activities() -> Result<(), WorkflowRegistrationError> { run(activities::inline_stubs::process), ); + let super_init_activity = Activity::new_with_action( + activity::Config::action( + "core.function.objectiveC.types.superInit", + "Obj-C: Adjust return types of [super init…] calls", + "Adjust the return type of calls to objc_msgSendSuper2 where the selector is in the init family.", + ) + .eligibility( + activity::Eligibility::auto().predicate( + activity::ViewType::in_(["Mach-O", "DSCView"]), + )), + run(activities::super_init::process), + ); + workflow .activity_after(&inline_stubs_activity, "core.function.translateTailCalls")? .activity_after(&objc_msg_send_calls_activity, &inline_stubs_activity.name())? + .activity_after(&super_init_activity, "core.function.generateMediumLevelIL")? .register_with_config(WORKFLOW_INFO)?; Ok(()) |
