fune/third_party/rust/goblin/examples/ar.rs
Bastien Orivel ec3b82b135 Bug 1579425 - Part 2: Revendor dependencies. r=froydnj
Depends on D45046

Differential Revision: https://phabricator.services.mozilla.com/D45047

--HG--
rename : third_party/rust/goblin/src/elf/dyn.rs => third_party/rust/goblin/src/elf/dynamic.rs
rename : third_party/rust/object/src/lib.rs => third_party/rust/object/src/read/any.rs
rename : third_party/rust/object/src/pe.rs => third_party/rust/object/src/read/pe.rs
rename : third_party/rust/object/src/wasm.rs => third_party/rust/object/src/read/wasm.rs
extra : moz-landing-system : lando
2019-09-06 17:49:58 +00:00

45 lines
1.5 KiB
Rust

//cargo run --example=ar -- crt1.a
use goblin::elf;
use goblin::archive;
use std::env;
use std::path::Path;
use std::fs::File;
use std::io::Read;
pub fn main () {
let len = env::args().len();
if len <= 2 {
println!("usage: ar <path to archive> member")
} else {
let mut path = String::default();
let mut member = String::default();
for (i, arg) in env::args().enumerate() {
if i == 1 {
path = arg.as_str().to_owned();
} else if i == 2 {
member = arg.as_str().to_owned();
}
}
let path = Path::new(&path);
let buffer = { let mut v = Vec::new(); let mut f = File::open(&path).unwrap(); f.read_to_end(&mut v).unwrap(); v};
match archive::Archive::parse(&buffer) {
Ok(archive) => {
println!("{:#?}", &archive);
println!("start: {:?}", archive.member_of_symbol("_start"));
match archive.extract(&member, &buffer) {
Ok(bytes) => {
match elf::Elf::parse(&bytes) {
Ok(elf) => {
println!("got elf: {:#?}", elf);
},
Err(err) => println!("Err: {:?}", err)
}
},
Err(err) => println!("Extraction Error: {:?}", err)
}
},
Err(err) => println!("Err: {:?}", err)
}
}
}