diff options
Diffstat (limited to 'plugins/workflow_objc/src/activities/inline_stubs.rs')
| -rw-r--r-- | plugins/workflow_objc/src/activities/inline_stubs.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/plugins/workflow_objc/src/activities/inline_stubs.rs b/plugins/workflow_objc/src/activities/inline_stubs.rs new file mode 100644 index 00000000..daae9baa --- /dev/null +++ b/plugins/workflow_objc/src/activities/inline_stubs.rs @@ -0,0 +1,26 @@ +use binaryninja::workflow::AnalysisContext; + +use crate::{metadata::GlobalState, Error}; + +// If this function is within a section known to contain Objective-C stubs, +// mark it as being inlined during analysis. +pub fn process(ac: &AnalysisContext) -> Result<(), Error> { + let view = ac.view(); + if GlobalState::should_ignore_view(&view) { + return Ok(()); + } + + let func = ac.function(); + let Some(objc_stubs) = GlobalState::analysis_info(&view) + .as_ref() + .and_then(|info| info.objc_stubs.clone()) + else { + return Ok(()); + }; + + if objc_stubs.contains(&func.start()) { + func.set_auto_inline_during_analysis(true); + } + + Ok(()) +} |
