summaryrefslogtreecommitdiff
path: root/rust/src
diff options
context:
space:
mode:
authorRubens Brandao <git@rubens.io>2024-05-27 17:53:57 -0300
committerKyleMiles <krm504@nyu.edu>2024-05-28 17:11:23 -0400
commitfce26815b400b5d3c0b67a46085ba8c9a61c1457 (patch)
treec2828f1147586ca1f5b5235aad27c700d138226b /rust/src
parent53eed1fedbef8c778ba1ea03d6660a7f097886ca (diff)
update `Session::load_with_option` to the new API
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/headless.rs9
-rw-r--r--rust/src/lib.rs11
-rw-r--r--rust/src/metadata.rs7
3 files changed, 9 insertions, 18 deletions
diff --git a/rust/src/headless.rs b/rust/src/headless.rs
index 15754aba..d4d8892a 100644
--- a/rust/src/headless.rs
+++ b/rust/src/headless.rs
@@ -14,9 +14,8 @@
use crate::{
binaryview,
- metadata::Metadata,
- rc::{self, Ref},
- string::BnStrCompatible,
+ rc,
+ string::{BnStrCompatible, IntoJson},
};
use std::env;
@@ -146,11 +145,11 @@ impl Session {
/// let bv = headless_session.load_with_options("/bin/cat", true, Some(settings))
/// .expect("Couldn't open `/bin/cat`");
/// ```
- pub fn load_with_options(
+ pub fn load_with_options<O: IntoJson>(
&self,
filename: &str,
update_analysis_and_wait: bool,
- options: Option<Ref<Metadata>>,
+ options: Option<O>,
) -> Option<rc::Ref<binaryview::BinaryView>> {
crate::load_with_options(filename, update_analysis_and_wait, options)
}
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index f20a33a9..cb511a7a 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -197,12 +197,13 @@ const BN_INVALID_EXPR: usize = usize::MAX;
/// The main way to open and load files into Binary Ninja. Make sure you've properly initialized the core before calling this function. See [`crate::headless::init()`]
pub fn load<S: BnStrCompatible>(filename: S) -> Option<rc::Ref<binaryview::BinaryView>> {
let filename = filename.into_bytes_with_nul();
+ let options = "";
let handle = unsafe {
binaryninjacore_sys::BNLoadFilename(
filename.as_ref().as_ptr() as *mut _,
true,
- std::ptr::null(),
+ options.as_ptr() as *mut core::ffi::c_char,
None,
)
};
@@ -216,15 +217,13 @@ pub fn load<S: BnStrCompatible>(filename: S) -> Option<rc::Ref<binaryview::Binar
/// The main way to open and load files (with options) into Binary Ninja. Make sure you've properly initialized the core before calling this function. See [`crate::headless::init()`]
///
+/// <div class="warning">Your JSON needs to be compliant with RapidJSON's format, which basically means you just need to escape double quotes (\") and single quotes won't work.</div>
+///
/// ```no_run
/// use binaryninja::{metadata::Metadata, rc::Ref};
/// use std::collections::HashMap;
///
-/// let settings: Ref<Metadata> = HashMap::from([
-/// ("analysis.linearSweep.autorun", false.into()),
-/// ]).into();
-///
-/// let bv = binaryninja::load_with_options("/bin/cat", true, Some(settings))
+/// let bv = binaryninja::load_with_options("/bin/cat", true, Some("{\"analysis.linearSweep.autorun\": false}"))
/// .expect("Couldn't open `/bin/cat`");
/// ```
pub fn load_with_options<S: BnStrCompatible, O: IntoJson>(
diff --git a/rust/src/metadata.rs b/rust/src/metadata.rs
index 96571207..9eeff8fa 100644
--- a/rust/src/metadata.rs
+++ b/rust/src/metadata.rs
@@ -710,13 +710,6 @@ impl IntoJson for &Metadata {
}
}
-impl IntoJson for Metadata {
- type Output = BnString;
- fn get_json_string(self) -> Result<BnString, ()> {
- Metadata::get_json_string(&self)
- }
-}
-
impl IntoJson for Ref<Metadata> {
type Output = BnString;
fn get_json_string(self) -> Result<BnString, ()> {