1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
extern crate vmread;
fn main() {
let ctx_ret = vmread::create_context(0);
if ctx_ret.is_ok() {
let (mut ctx, c_ctx) = ctx_ret.unwrap();
println!("VMRead initialized!");
loop {
println!("Enter process name");
let mut proc_name = String::new();
match std::io::stdin().read_line(&mut proc_name) {
Ok(_) => {
match proc_name.trim() {
"q" => break,
s => {
match ctx.refresh_processes().process_list.iter_mut().find(|a| a.name == s) {
Some(p) => {
println!("Module list for {}", s);
println!("{:#14} {:#14} {:#8} {:#6} {}", "BASE ADDRESS", "ENTRY POINT", "SIZE", "LOADC", "NAME");
for i in &(p.refresh_modules(c_ctx).module_list) {
println!("{:#14x} {:#14x} {:#8x} {:#6x} {}", i.info.baseAddress, i.info.entryPoint, i.info.sizeOfModule, i.info.loadCount, i.name);
}
loop {
println!("Enter module name");
let mut mod_name = String::new();
match std::io::stdin().read_line(&mut mod_name) {
Ok(_) => {
match mod_name.trim() {
"q" => break,
mn => {
match p.module_list.iter_mut().find(|a| a.name == mn) {
Some(m) => {
println!("Export list for {}:", m.name);
println!("{:#14} NAME", "ADDRESS");
for e in &m.refresh_exports(&p.proc, c_ctx).export_list {
println!("{:<#14x} {}", e.address, e.name);
}
},
_ => println!("Module not found!")
}
}
}
},
Err(error) => {
println!("error: {}", error);
break;
}
}
}
},
_ => println!("Process {} not found!", s)
}
}
}
},
Err(error) => {
println!("error: {}", error);
break;
}
}
}
} else {
let (eval, estr) = ctx_ret.err().unwrap();
println!("Initialization error {}: {}", eval, estr);
}
}