summaryrefslogtreecommitdiff
path: root/plugins/idb_import/src/commands
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2026-01-20 14:30:34 -0800
committerMason Reed <35282038+emesare@users.noreply.github.com>2026-03-23 21:50:02 -0700
commit1e85844d6407db817db25fd43f1dd9756ef0c3ae (patch)
treed6d2df2c3ed9403604fecff294be88d70fce5cf7 /plugins/idb_import/src/commands
parent1f98e7ca7cce35ae4c2b4741f33e9892dd695534 (diff)
IDB Import refactor
Diffstat (limited to 'plugins/idb_import/src/commands')
-rw-r--r--plugins/idb_import/src/commands/load_file.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/plugins/idb_import/src/commands/load_file.rs b/plugins/idb_import/src/commands/load_file.rs
new file mode 100644
index 00000000..f7dd92c5
--- /dev/null
+++ b/plugins/idb_import/src/commands/load_file.rs
@@ -0,0 +1,46 @@
+use crate::commands::LoadFileField;
+use crate::mapper::IDBMapper;
+use crate::parse::IDBFileParser;
+use binaryninja::binary_view::{BinaryView, BinaryViewExt};
+use binaryninja::command::Command;
+use binaryninja::interaction::Form;
+use std::fs::File;
+use std::io::BufReader;
+use std::path::PathBuf;
+
+pub struct LoadIDBFile;
+
+impl Command for LoadIDBFile {
+ fn action(&self, view: &BinaryView) {
+ let mut form = Form::new("Load IDB File");
+ let mut default_path = PathBuf::from(&view.file().file_path());
+ default_path.set_extension("idb");
+ let file_field =
+ LoadFileField::with_default("*.idb;;*.i64;;*.til", &default_path.to_string_lossy());
+ form.add_field(file_field.field());
+ if !form.prompt() {
+ return;
+ }
+ let Some(file_path) = LoadFileField::from_form(&form) else {
+ return;
+ };
+ let Ok(file) = File::open(&file_path) else {
+ tracing::error!("Failed to open file: {}", file_path.display());
+ return;
+ };
+ let mut file_reader = BufReader::new(file);
+ let file_parser = IDBFileParser::new();
+ match file_parser.parse(&mut file_reader) {
+ Ok(idb_info) => {
+ IDBMapper::new(idb_info).map_to_view(view);
+ }
+ Err(e) => {
+ tracing::error!("Failed to parse IDB file: {}", e);
+ }
+ }
+ }
+
+ fn valid(&self, _view: &BinaryView) -> bool {
+ true
+ }
+}