summaryrefslogtreecommitdiff
path: root/plugins/workflow_objc/src/activities/inline_stubs.rs
blob: 8ddb2fa35200d8dc9bad31fcecc2a286cd40c2e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use binaryninja::{function::InlineDuringAnalysis, 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(InlineDuringAnalysis::InlineUsingCallAddress);
    }

    Ok(())
}