Skip to main content

bookmarks_ls/
bookmarks_ls.rs

1use idalib::idb::IDB;
2
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}