Created
January 15, 2026 11:58
-
-
Save rbran/846c81acc5fe5ea6f72229c1bedd624e to your computer and use it in GitHub Desktop.
Example of Binary Ninja rust plugin that detect new data events on all BinaryViews
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| use binaryninja::binary_view::{ | |
| BinaryView, BinaryViewEventHandler, BinaryViewEventType, | |
| }; | |
| use binaryninja::data_notification::{ | |
| CustomDataNotification, DataNotificationTriggers, | |
| }; | |
| use binaryninja::tags::TagReference; | |
| const LOG_NAME: &str = "BinShow"; | |
| macro_rules! info { | |
| ($msg:expr) => { | |
| binaryninja::logger::bn_log( | |
| LOG_NAME, | |
| binaryninja::logger::BnLogLevel::InfoLog, | |
| $msg, | |
| ) | |
| }; | |
| } | |
| struct InitTrigger; | |
| impl BinaryViewEventHandler for InitTrigger { | |
| fn on_event(&self, view: &BinaryView) { | |
| info!("InitTrigger called"); | |
| // functions that will listen for data events | |
| let data_trigger = DataTrigger; | |
| let triggers = DataNotificationTriggers::default() | |
| .tag_added() | |
| .tag_removed(); | |
| // register callbacks for tag creation/deletion | |
| data_trigger.register(view, triggers); | |
| info!("InitTrigger registered"); | |
| } | |
| } | |
| pub struct DataTrigger; | |
| impl CustomDataNotification for DataTrigger { | |
| fn tag_added(&mut self, _view: &BinaryView, _tag_ref: &TagReference) { | |
| info!("tag added"); | |
| } | |
| fn tag_removed(&mut self, _view: &BinaryView, _tag_ref: &TagReference) { | |
| info!("tag removed"); | |
| } | |
| } | |
| #[allow(non_snake_case)] | |
| #[unsafe(no_mangle)] | |
| pub extern "C" fn UIPluginInit() -> bool { | |
| // create the logger, so it shows up at the log "filter" dropdown | |
| let _ = binaryninja::logger::Logger::new(LOG_NAME); | |
| // register a trigger that will be called on every now binary views created | |
| binaryninja::binary_view::register_binary_view_event( | |
| BinaryViewEventType::BinaryViewInitialAnalysisCompletionEvent, | |
| InitTrigger, | |
| ); | |
| true | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment