1 const NUM_RUNS: usize = 10;
3 fn run_self(exe: &str) -> usize {
4 use std::process::Command;
5 let mut set = std::collections::HashSet::new();
7 let mut cmd = Command::new(exe);
9 (0..NUM_RUNS).for_each(|_| {
10 set.insert(cmd.output().expect("failed to execute process").stdout);
16 let mut args = std::env::args();
17 let arg0 = args.next().unwrap();
19 Some(s) if s.eq("--report") => {
20 println!("main = {:#?}", &main as *const _);
22 Some(s) if s.eq("--test-no-aslr") => {
23 let cnt = run_self(&arg0);
25 eprintln!("FAIL: {} most likely ASLR", arg0);
26 std::process::exit(1);
28 println!("PASS: {} does no ASLR", arg0);
30 Some(s) if s.eq("--test-aslr") => {
31 let cnt = run_self(&arg0);
33 eprintln!("FAIL: {} most likely no ASLR", arg0);
34 std::process::exit(1);
36 println!("PASS: {} does ASLR", arg0);
39 println!("Usage: {} --test-no-aslr | --test-aslr", arg0);
40 std::process::exit(1);