diff options
| author | Mark Rowe <mark@vector35.com> | 2025-08-07 22:53:00 -0700 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2025-08-13 19:25:43 -0700 |
| commit | 395a6dc683bcb687ad5fd1c5b1b63205ffd1af79 (patch) | |
| tree | 735fa7374b5b91c989e10e0155670360e1c5440e /plugins/svd/src | |
| parent | e13a82d8a007aa3c2492eaf906f92a8e2adf04e6 (diff) | |
[Rust] Add builder API for creating workflows
`Workflow::new` is replaced by `Workflow::build` that returns a
`Builder` type that supports the operations that mutate a workflow, such
as registering activities.
`Workflow::instance` is replaced by `Workflow::get` to make clear that
it is intended to look up an existing workflow.
`Workflow::cloned` is introduced to wrap the common pattern of
retrieving an existing workflow and cloning it with the same name in
order to modify it.
`Builder::activity_before` / `Builder::activity_after` are introduced to
wrap the common pattern of registering an activity then inserting it
before or after a given activity.
Diffstat (limited to 'plugins/svd/src')
| -rw-r--r-- | plugins/svd/src/lib.rs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/plugins/svd/src/lib.rs b/plugins/svd/src/lib.rs index b02b1ec2..3a40d2c0 100644 --- a/plugins/svd/src/lib.rs +++ b/plugins/svd/src/lib.rs @@ -9,7 +9,6 @@ use binaryninja::logger::Logger; use binaryninja::workflow::{Activity, AnalysisContext, Workflow}; use log::LevelFilter; -pub const LOADER_ACTIVITY_NAME: &str = "analysis.svd.loader"; const LOADER_ACTIVITY_CONFIG: &str = r#"{ "name": "analysis.svd.loader", "title" : "SVD Loader", @@ -62,7 +61,10 @@ impl Command for LoadSVDFile { #[allow(non_snake_case)] #[cfg(not(feature = "demo"))] pub extern "C" fn CorePluginInit() -> bool { - plugin_init(); + if plugin_init().is_err() { + log::error!("Failed to initialize SVD plug-in"); + return false; + } true } @@ -70,11 +72,14 @@ pub extern "C" fn CorePluginInit() -> bool { #[allow(non_snake_case)] #[cfg(feature = "demo")] pub extern "C" fn SVDPluginInit() -> bool { - plugin_init(); + if plugin_init().is_err() { + log::error!("Failed to initialize SVD plug-in"); + return false; + } true } -fn plugin_init() { +fn plugin_init() -> Result<(), ()> { Logger::new("SVD").with_level(LevelFilter::Debug).init(); binaryninja::command::register_command( @@ -113,12 +118,10 @@ fn plugin_init() { }; // Register new workflow activity to load svd information. - let old_module_meta_workflow = Workflow::instance("core.module.metaAnalysis"); - let module_meta_workflow = old_module_meta_workflow.clone_to("core.module.metaAnalysis"); let loader_activity = Activity::new_with_action(LOADER_ACTIVITY_CONFIG, loader_activity); - module_meta_workflow - .register_activity(&loader_activity) - .unwrap(); - module_meta_workflow.insert("core.module.loadDebugInfo", [LOADER_ACTIVITY_NAME]); - module_meta_workflow.register().unwrap(); + Workflow::cloned("core.module.metaAnalysis") + .ok_or(())? + .activity_before(&loader_activity, "core.module.loadDebugInfo")? + .register()?; + Ok(()) } |
