print_maps/
print_maps.rs

1extern crate proc_maps;
2
3fn main() {
4    let args: Vec<String> = std::env::args().collect();
5
6    let pid = if args.len() > 1 {
7        args[1].parse().expect("invalid pid")
8    } else {
9        panic!("Usage: print_maps <PID>");
10    };
11
12    println!(
13        "{:^30} {:^16} {:^7} {}",
14        "ADDRESSES", "SIZE", "MODES", "PATH"
15    );
16
17    let empty_path = std::path::Path::new("");
18    let maps = proc_maps::get_process_maps(pid).expect("failed to get proc maps");
19    for map in maps {
20        let r_flag = if map.is_read() { "R" } else { "-" };
21        let w_flag = if map.is_write() { "W" } else { "-" };
22        let x_flag = if map.is_exec() { "X" } else { "-" };
23        let filename = map.filename().unwrap_or(empty_path).to_str().unwrap_or("-");
24        println!(
25            "{:>30} {:>16} [{} {} {}] {}",
26            format!("{:#x}-{:#x}", map.start(), map.start() + map.size()),
27            map.size(),
28            r_flag,
29            w_flag,
30            x_flag,
31            filename,
32        );
33    }
34}