bookmarks_ls/
bookmarks_ls.rs1use idalib::idb::IDB;
2
3fn main() -> anyhow::Result<()> {
4 println!("Trying to open IDA database...");
5
6 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 let _ = idb.bookmarks().erase(addr);
15
16 let read_desc = idb.bookmarks().get_description(addr);
18 assert!(read_desc.is_none());
19 }
20
21 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 let _slot = idb.bookmarks().mark(addr, &desc)?;
34
35 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 for i in 0..idb.bookmarks().len() {
43 let read_addr = idb.bookmarks().get_address(i).unwrap();
45 let addr_str = format!("{read_addr:#x}");
46
47 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 idb.bookmarks().erase(addr)?;
59
60 let read_desc = idb.bookmarks().get_description(addr);
62 assert!(read_desc.is_none());
63 }
64
65 assert_eq!(idb.bookmarks().len(), 0);
67
68 Ok(())
69}