#![no_main]
use linux_libc_auxv::StackLayoutRef;
use std::slice;
#[unsafe(no_mangle)]
fn main(argc: isize, argv: *const *const u8) -> isize {
let buffer = unsafe {
slice::from_raw_parts(argv.cast::<u8>(), 0x19000)
};
let parsed = StackLayoutRef::new(buffer, Some(argc as usize));
println!("There are {} arguments.", parsed.argc());
println!(" argv (raw)");
for (i, arg) in parsed.argv_raw_iter().enumerate() {
println!(" [{i}] @ {arg:?}");
}
println!(" argv");
for (i, arg) in unsafe { parsed.argv_iter() }.enumerate() {
println!(" [{i}] {arg:?}");
}
println!("There are {} environment variables.", parsed.envc());
println!(" envv (raw)");
for (i, env) in parsed.envv_raw_iter().enumerate() {
println!(" [{i}] {env:?}");
}
println!(" envv");
for (i, env) in unsafe { parsed.envv_iter() }.enumerate() {
println!(" [{i}] {env:?}");
}
println!(
"There are {} auxiliary vector entries/AT variables.",
parsed.auxv_raw_iter().count()
);
println!(" aux");
for aux in unsafe { parsed.auxv_iter() } {
if aux.key().value_in_data_area() {
println!(" {:?} => @ {:?}", aux.key(), aux);
} else {
println!(" {:?} => {:?}", aux.key(), aux);
}
}
0
}