Skip to content

Instantly share code, notes, and snippets.

@rbran
Created January 15, 2026 11:58
Show Gist options
  • Select an option

  • Save rbran/846c81acc5fe5ea6f72229c1bedd624e to your computer and use it in GitHub Desktop.

Select an option

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
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