summaryrefslogtreecommitdiff
path: root/plugins/workflow_swift/src/lib.rs
blob: a04f3659985b95a855292d2b1b0fa428ff834dca (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
27
28
29
30
31
32
33
34
35
36
mod demangler;

use binaryninja::add_optional_plugin_dependency;
use binaryninja::demangle::Demangler;
use binaryninja::settings::Settings;
use demangler::SwiftDemangler;

pub const SETTING_EXTRACT_TYPES: &str = "analysis.swift.extractTypesFromMangledNames";

#[no_mangle]
#[allow(non_snake_case)]
pub extern "C" fn CorePluginDependencies() {
    add_optional_plugin_dependency("arch_x86");
    add_optional_plugin_dependency("arch_arm64");
}

#[no_mangle]
#[allow(non_snake_case)]
pub extern "C" fn CorePluginInit() -> bool {
    binaryninja::tracing_init!("Plugin.Swift");

    let settings = Settings::new();
    settings.register_setting_json(
        SETTING_EXTRACT_TYPES,
        r#"{
        "title" : "Extract Types from Mangled Names",
        "type" : "boolean",
        "default" : true,
        "description" : "Extract parameter and return type information from Swift mangled names and apply them to function signatures. When disabled, only the demangled name is applied."
        }"#,
    );

    Demangler::register("Swift", SwiftDemangler);

    true
}