diff options
| author | Mason Reed <mason@vector35.com> | 2026-01-20 14:30:34 -0800 |
|---|---|---|
| committer | Mason Reed <35282038+emesare@users.noreply.github.com> | 2026-03-23 21:50:02 -0700 |
| commit | 1e85844d6407db817db25fd43f1dd9756ef0c3ae (patch) | |
| tree | d6d2df2c3ed9403604fecff294be88d70fce5cf7 /plugins/idb_import/src/commands | |
| parent | 1f98e7ca7cce35ae4c2b4741f33e9892dd695534 (diff) | |
IDB Import refactor
Diffstat (limited to 'plugins/idb_import/src/commands')
| -rw-r--r-- | plugins/idb_import/src/commands/load_file.rs | 46 |
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 + } +} |
