Skip to main content

Bookmarks

Struct Bookmarks 

Source
pub struct Bookmarks<'a> { /* private fields */ }

Implementations§

Source§

impl<'a> Bookmarks<'a>

Source

pub fn mark( &self, ea: Address, desc: impl AsRef<str>, ) -> Result<BookmarkIndex, IDAError>

Examples found in repository?
examples/bookmarks_ls.rs (line 33)
3fn main() -> anyhow::Result<()> {
4    println!("Trying to open IDA database...");
5
6    // Open IDA database
7    let idb = IDB::open("./tests/ls")?;
8
9    println!("Testing erase(), get_description(), and len() (pass 1; clear old bookmarks)");
10    for (_id, f) in idb.functions() {
11        let addr = f.start_address();
12
13        // erase(), ignore errors
14        let _ = idb.bookmarks().erase(addr);
15
16        // get_description()
17        let read_desc = idb.bookmarks().get_description(addr);
18        assert!(read_desc.is_none());
19    }
20
21    // len()
22    assert_eq!(idb.bookmarks().len(), 0);
23
24    println!("Testing mark() and get_description()");
25    for (id, f) in idb.functions() {
26        let addr = f.start_address();
27        let desc = format!(
28            "Bookmark added by idalib: {id} {} {addr:#x}",
29            f.name().unwrap(),
30        );
31
32        // mark()
33        let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35        // get_description()
36        let read_desc = idb.bookmarks().get_description(addr);
37        assert_eq!(read_desc.unwrap(), desc);
38    }
39
40    println!("Testing len(), get_address(), and get_description()");
41    // len()
42    for i in 0..idb.bookmarks().len() {
43        // get_address()
44        let read_addr = idb.bookmarks().get_address(i).unwrap();
45        let addr_str = format!("{read_addr:#x}");
46
47        // get_description()
48        let read_desc = idb.bookmarks().get_description(read_addr).unwrap();
49
50        assert!(read_desc.ends_with(addr_str.as_str()));
51    }
52
53    println!("Testing erase(), get_description(), and len() (pass 2)");
54    for (_id, f) in idb.functions() {
55        let addr = f.start_address();
56
57        // erase()
58        idb.bookmarks().erase(addr)?;
59
60        // bookmarks_get_desc()
61        let read_desc = idb.bookmarks().get_description(addr);
62        assert!(read_desc.is_none());
63    }
64
65    // bookmarks_size()
66    assert_eq!(idb.bookmarks().len(), 0);
67
68    Ok(())
69}
Source

pub fn mark_with( &self, ea: Address, idx: BookmarkIndex, desc: impl AsRef<str>, ) -> Result<BookmarkIndex, IDAError>

Source

pub fn get_description(&self, ea: Address) -> Option<String>

Examples found in repository?
examples/bookmarks_ls.rs (line 17)
3fn main() -> anyhow::Result<()> {
4    println!("Trying to open IDA database...");
5
6    // Open IDA database
7    let idb = IDB::open("./tests/ls")?;
8
9    println!("Testing erase(), get_description(), and len() (pass 1; clear old bookmarks)");
10    for (_id, f) in idb.functions() {
11        let addr = f.start_address();
12
13        // erase(), ignore errors
14        let _ = idb.bookmarks().erase(addr);
15
16        // get_description()
17        let read_desc = idb.bookmarks().get_description(addr);
18        assert!(read_desc.is_none());
19    }
20
21    // len()
22    assert_eq!(idb.bookmarks().len(), 0);
23
24    println!("Testing mark() and get_description()");
25    for (id, f) in idb.functions() {
26        let addr = f.start_address();
27        let desc = format!(
28            "Bookmark added by idalib: {id} {} {addr:#x}",
29            f.name().unwrap(),
30        );
31
32        // mark()
33        let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35        // get_description()
36        let read_desc = idb.bookmarks().get_description(addr);
37        assert_eq!(read_desc.unwrap(), desc);
38    }
39
40    println!("Testing len(), get_address(), and get_description()");
41    // len()
42    for i in 0..idb.bookmarks().len() {
43        // get_address()
44        let read_addr = idb.bookmarks().get_address(i).unwrap();
45        let addr_str = format!("{read_addr:#x}");
46
47        // get_description()
48        let read_desc = idb.bookmarks().get_description(read_addr).unwrap();
49
50        assert!(read_desc.ends_with(addr_str.as_str()));
51    }
52
53    println!("Testing erase(), get_description(), and len() (pass 2)");
54    for (_id, f) in idb.functions() {
55        let addr = f.start_address();
56
57        // erase()
58        idb.bookmarks().erase(addr)?;
59
60        // bookmarks_get_desc()
61        let read_desc = idb.bookmarks().get_description(addr);
62        assert!(read_desc.is_none());
63    }
64
65    // bookmarks_size()
66    assert_eq!(idb.bookmarks().len(), 0);
67
68    Ok(())
69}
Source

pub fn get_address(&self, idx: BookmarkIndex) -> Option<Address>

Examples found in repository?
examples/bookmarks_ls.rs (line 44)
3fn main() -> anyhow::Result<()> {
4    println!("Trying to open IDA database...");
5
6    // Open IDA database
7    let idb = IDB::open("./tests/ls")?;
8
9    println!("Testing erase(), get_description(), and len() (pass 1; clear old bookmarks)");
10    for (_id, f) in idb.functions() {
11        let addr = f.start_address();
12
13        // erase(), ignore errors
14        let _ = idb.bookmarks().erase(addr);
15
16        // get_description()
17        let read_desc = idb.bookmarks().get_description(addr);
18        assert!(read_desc.is_none());
19    }
20
21    // len()
22    assert_eq!(idb.bookmarks().len(), 0);
23
24    println!("Testing mark() and get_description()");
25    for (id, f) in idb.functions() {
26        let addr = f.start_address();
27        let desc = format!(
28            "Bookmark added by idalib: {id} {} {addr:#x}",
29            f.name().unwrap(),
30        );
31
32        // mark()
33        let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35        // get_description()
36        let read_desc = idb.bookmarks().get_description(addr);
37        assert_eq!(read_desc.unwrap(), desc);
38    }
39
40    println!("Testing len(), get_address(), and get_description()");
41    // len()
42    for i in 0..idb.bookmarks().len() {
43        // get_address()
44        let read_addr = idb.bookmarks().get_address(i).unwrap();
45        let addr_str = format!("{read_addr:#x}");
46
47        // get_description()
48        let read_desc = idb.bookmarks().get_description(read_addr).unwrap();
49
50        assert!(read_desc.ends_with(addr_str.as_str()));
51    }
52
53    println!("Testing erase(), get_description(), and len() (pass 2)");
54    for (_id, f) in idb.functions() {
55        let addr = f.start_address();
56
57        // erase()
58        idb.bookmarks().erase(addr)?;
59
60        // bookmarks_get_desc()
61        let read_desc = idb.bookmarks().get_description(addr);
62        assert!(read_desc.is_none());
63    }
64
65    // bookmarks_size()
66    assert_eq!(idb.bookmarks().len(), 0);
67
68    Ok(())
69}
Source

pub fn get_description_by_index(&self, idx: BookmarkIndex) -> Option<String>

Source

pub fn erase(&self, ea: Address) -> Result<(), IDAError>

Examples found in repository?
examples/bookmarks_ls.rs (line 14)
3fn main() -> anyhow::Result<()> {
4    println!("Trying to open IDA database...");
5
6    // Open IDA database
7    let idb = IDB::open("./tests/ls")?;
8
9    println!("Testing erase(), get_description(), and len() (pass 1; clear old bookmarks)");
10    for (_id, f) in idb.functions() {
11        let addr = f.start_address();
12
13        // erase(), ignore errors
14        let _ = idb.bookmarks().erase(addr);
15
16        // get_description()
17        let read_desc = idb.bookmarks().get_description(addr);
18        assert!(read_desc.is_none());
19    }
20
21    // len()
22    assert_eq!(idb.bookmarks().len(), 0);
23
24    println!("Testing mark() and get_description()");
25    for (id, f) in idb.functions() {
26        let addr = f.start_address();
27        let desc = format!(
28            "Bookmark added by idalib: {id} {} {addr:#x}",
29            f.name().unwrap(),
30        );
31
32        // mark()
33        let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35        // get_description()
36        let read_desc = idb.bookmarks().get_description(addr);
37        assert_eq!(read_desc.unwrap(), desc);
38    }
39
40    println!("Testing len(), get_address(), and get_description()");
41    // len()
42    for i in 0..idb.bookmarks().len() {
43        // get_address()
44        let read_addr = idb.bookmarks().get_address(i).unwrap();
45        let addr_str = format!("{read_addr:#x}");
46
47        // get_description()
48        let read_desc = idb.bookmarks().get_description(read_addr).unwrap();
49
50        assert!(read_desc.ends_with(addr_str.as_str()));
51    }
52
53    println!("Testing erase(), get_description(), and len() (pass 2)");
54    for (_id, f) in idb.functions() {
55        let addr = f.start_address();
56
57        // erase()
58        idb.bookmarks().erase(addr)?;
59
60        // bookmarks_get_desc()
61        let read_desc = idb.bookmarks().get_description(addr);
62        assert!(read_desc.is_none());
63    }
64
65    // bookmarks_size()
66    assert_eq!(idb.bookmarks().len(), 0);
67
68    Ok(())
69}
Source

pub fn erase_by_index(&self, idx: BookmarkIndex) -> Result<(), IDAError>

Source

pub fn find_index(&self, ea: Address) -> Option<BookmarkIndex>

Source

pub fn len(&self) -> BookmarkIndex

Examples found in repository?
examples/bookmarks_ls.rs (line 22)
3fn main() -> anyhow::Result<()> {
4    println!("Trying to open IDA database...");
5
6    // Open IDA database
7    let idb = IDB::open("./tests/ls")?;
8
9    println!("Testing erase(), get_description(), and len() (pass 1; clear old bookmarks)");
10    for (_id, f) in idb.functions() {
11        let addr = f.start_address();
12
13        // erase(), ignore errors
14        let _ = idb.bookmarks().erase(addr);
15
16        // get_description()
17        let read_desc = idb.bookmarks().get_description(addr);
18        assert!(read_desc.is_none());
19    }
20
21    // len()
22    assert_eq!(idb.bookmarks().len(), 0);
23
24    println!("Testing mark() and get_description()");
25    for (id, f) in idb.functions() {
26        let addr = f.start_address();
27        let desc = format!(
28            "Bookmark added by idalib: {id} {} {addr:#x}",
29            f.name().unwrap(),
30        );
31
32        // mark()
33        let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35        // get_description()
36        let read_desc = idb.bookmarks().get_description(addr);
37        assert_eq!(read_desc.unwrap(), desc);
38    }
39
40    println!("Testing len(), get_address(), and get_description()");
41    // len()
42    for i in 0..idb.bookmarks().len() {
43        // get_address()
44        let read_addr = idb.bookmarks().get_address(i).unwrap();
45        let addr_str = format!("{read_addr:#x}");
46
47        // get_description()
48        let read_desc = idb.bookmarks().get_description(read_addr).unwrap();
49
50        assert!(read_desc.ends_with(addr_str.as_str()));
51    }
52
53    println!("Testing erase(), get_description(), and len() (pass 2)");
54    for (_id, f) in idb.functions() {
55        let addr = f.start_address();
56
57        // erase()
58        idb.bookmarks().erase(addr)?;
59
60        // bookmarks_get_desc()
61        let read_desc = idb.bookmarks().get_description(addr);
62        assert!(read_desc.is_none());
63    }
64
65    // bookmarks_size()
66    assert_eq!(idb.bookmarks().len(), 0);
67
68    Ok(())
69}
Source

pub fn is_empty(&self) -> bool

Auto Trait Implementations§

§

impl<'a> !Send for Bookmarks<'a>

§

impl<'a> !Sync for Bookmarks<'a>

§

impl<'a> Freeze for Bookmarks<'a>

§

impl<'a> RefUnwindSafe for Bookmarks<'a>

§

impl<'a> Unpin for Bookmarks<'a>

§

impl<'a> UnsafeUnpin for Bookmarks<'a>

§

impl<'a> UnwindSafe for Bookmarks<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.