forked from mirrors/gecko-dev
		
	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
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			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)
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |