diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/goblin/examples/ar.rs | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/goblin/examples/ar.rs')
-rw-r--r-- | third_party/rust/goblin/examples/ar.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/third_party/rust/goblin/examples/ar.rs b/third_party/rust/goblin/examples/ar.rs new file mode 100644 index 0000000000..9346e3e045 --- /dev/null +++ b/third_party/rust/goblin/examples/ar.rs @@ -0,0 +1,45 @@ +//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) + } + } +} |